Esempio n. 1
0
            void chat_app::init()
            {
                set_title("Chat");

                _mail = std::make_shared<m::mailbox>(_id);
                _sender = std::make_shared<ms::sender>(_conversation->user_service(), _mail);
                _main = new QWidget;
                _main_layout = new QGridLayout{_main};
                layout()->addWidget(_main, 1,0,2,3);
                setMinimumSize(QSize{MIN_WIDTH, MIN_HEIGHT});
                set_main(_main);
            }
Esempio n. 2
0
            void script_app::init()
            {
                INVARIANT(root());
                INVARIANT(layout());
                INVARIANT(_conversation);
                INVARIANT(_app);

                //setup frontend
                setup_decorations();

                _canvas = new QWidget;
                _canvas_layout = new QGridLayout{_canvas};
                layout()->addWidget(_canvas, 1,0,2,3);
                auto front = std::make_shared<qtw::qt_frontend>(_canvas, _canvas_layout, nullptr);
                connect(front.get(), SIGNAL(alerted()), this, SLOT(got_alert()));

                _front = std::make_shared<qtw::qt_frontend_client>(front);

                set_main(_canvas);

                //setup mail
                _mail = std::make_shared<m::mailbox>(_id);
                _sender = std::make_shared<ms::sender>(_conversation->user_service(), _mail);

                //setup api and backend
                _api = std::make_shared<l::lua_api>(
                        _app, 
                        _sender, 
                        _conversation, 
                        _conversation_service, 
                        _front.get());
                _api->who_started_id = _from_id;

                _back = std::make_shared<l::backend_client>(_api.get(), _mail); 

                //assign backend to frontend
                _front->set_backend(_back.get());

                //run script and start backend on seperate thread
                _back->run(_app->code());
                _back->start();

                //setup mail service
                INVARIANT(_api);
                INVARIANT(_front);
                INVARIANT(_back);
                INVARIANT(_conversation);
                INVARIANT(_mail);
                INVARIANT(_sender);
            }
Esempio n. 3
0
void fncDecl(void) /* 関数宣言 */
{
  SymTbl *f1;

  localAdrs = START_LocalAdrs;                /* 局所領域割付けカウンタ初期化 */
  f1 = search_name(tmpTb.name);
  if (f1!=NULL && f1->nmKind!=fncId && f1->nmKind!=protId) {
    err_ss("識別子が重複している", f1->name); f1 = NULL;
  }

  fncPt = enter(tmpTb, fncId);                                /* 記号表に登録 */
  token = nextTkn();
  localTBL_open();                                      /* 局所用記号表を用意 */

  switch (token.kind) {                                           /* 引数処理 */
  case Void: token = nextTkn(); break;                         /* 引数 (void) */
  case ')':  break;                                            /* 引数なし () */
  default:                                                        /* 引数あり */
    for (;;) {
      set_type(); set_name(); enter(tmpTb, paraId);               /* 引数登録 */
      ++(fncPt->args);                                        /* 引数個数を+1 */
      if (token.kind != ',') break;                               /* 宣言終了 */
      token = nextTkn();                                          /* 次の引数 */
    }
  }
  token = chk_nextTkn(token, ')');                               /* ')'のはず */

  if (token.kind == ';') fncPt->nmKind = protId;          /* 関数プロトタイプ */
  set_adrs(fncPt);                          /* 関数入口番地と引数アドレス設定 */
  if (f1 != NULL) fncChk(f1, fncPt);                    /* 関数の正しさを確認 */

  switch (token.kind) {
  case ';': token = nextTkn(); break;                         /* プロトタイプ */
  case '{':
    if (IS_MAIN(fncPt)) set_main();                           /* main関数処理 */
    fncDecl_begin();                                          /* 関数入口処理 */
    block(1);                                                 /* 関数本体処理 */
    fncDecl_end();                                            /* 関数出口処理 */
    break;
  default:  err_s("関数の ; または { がない"); exit(1);
  }
  localTBL_close(fncPt);                                /* 局所用記号表を解消 */
  del_fncTable(f1, fncPt);                                /* 重複登録なら解消 */
  fncPt = NULL;                                               /* 関数処理終了 */
}
Esempio n. 4
0
            void script_app::init()
            {
                INVARIANT(root());
                INVARIANT(layout());
                INVARIANT(_conversation);
                INVARIANT(_app);

                //setup frontend
                setup_decorations();

                _canvas = new QWidget;
                _canvas_layout = new QGridLayout{_canvas};
                layout()->addWidget(_canvas, 1,0,2,3);
                set_main(_canvas);

                //setup mail
                _mail = std::make_shared<m::mailbox>(_id);
                _sender = std::make_shared<ms::sender>(_conversation->user_service(), _mail);

                ENSURE(_mail);
                ENSURE(_sender);
            }