Subscriber MsgMarketDepthTopDiff::GetSubscriber(SymbolIdType eSymbolId, PushType ePushType) { QJsonObject js; js.insert(szAttributeName[AN_SYMBOLID], szSymbolIdType[eSymbolId]); js.insert(szAttributeName[AN_PUSHTYPE], szPushType[ePushType]); return Subscriber(MsgType(), js); }
MsgType MyMsgProtco::GetMsgType(const char *szMsg) { char* endptr; char* p = new char[3]; memset(p, 0, 3); memcpy(p, szMsg, 2); unsigned long temp = strtoul(p, &endptr, 16); if (temp < MT_ERROR) { return MsgType(temp); } return MT_ERROR; }
BOOLEAN wind_out( const int *msg, WINFO *w ) { OBJECT *tree; switch( MsgType(msg) ) { case WM_MOVED: tree = (OBJECT *)(w->x); ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; break; } return FALSE; /* don't quit the application */ }
void MsgDispatcher::addMsg(long int delay, int sender, int receiver, int msg, void* extraInfo) { auto E_receiver = EMGR->getEntityByID(receiver); auto Msg = MsgType(msg); assert(E_receiver&&"recevier cannot be found"); Telegram tel(clock(), sender, receiver, Msg, extraInfo); if (delay==0) { } else { long int currentTime = clock(); tel.dispatchTime_ = delay + currentTime; } this->_msgQueue.insert(tel); }
/* ................................................................ * Handle user interaction with a form in open window `w'. * * Initial conditions are as follows: * w->x is the address of the form. * window is open, with appropriate WINFO rects & coordinates set * form is drawn within window, at correct virtual coordinates * ROOT object of form has correct x,y coordinates * * This routine works just like form_do, but dispatches window * events, redrawing and fixing up the object tree as appropriate, * and maintaining the various rects and coordinates in the WINFO struct. * * Returns exit object selected, |= 0x8000 if double clicked a TOUCHEXIT, * OR -1 if a message was received which couldn't be handled. * In the latter case, the `puntmsg' array is filled with the message buffer * which xform_do() couldn't handle, and the application is responsible for * picking up where xform_do() left off. A cop-out, I know. * * NOTE: form_dial( FMD_START,... ) and form_dial( FMD_FINISH,... ) * should NOT be used with xform_do(). * * User defined objects could cause problems with this routine, as * the boundary of the object may lie outside the window coordinates. * Caveat programmer. */ WORD cdecl xform_do( OBJECT *tree, WORD start_field, WORD puntmsg[] ) { WORD next_obj, edit_obj, idx; BOOLEAN cont, doedit; WORD event; MRETS m; WORD key, clicks; DIRS direction; /* form_keybd */ GRECT rect; cpx_tree = tree; SetAccCloseState( FALSE ); SetWmCloseState( FALSE ); /* * Get the next editable object */ if( start_field == 0 ) next_obj = find_obj( tree, 0, FORWARD ); else next_obj = start_field; edit_obj = 0; cont = TRUE; cursor = FALSE; while( cont ) { /* * Put the cursor in the edit field * Note: This is skipped if there is only one field. */ if( (next_obj != 0) && (edit_obj != next_obj) ) { edit_obj = next_obj; next_obj = 0; doedit = can_edit( tree, edit_obj ); if( doedit && !cursor ) { objc_edit( tree, edit_obj, 0, (int *)&idx, ED_INIT ); cursor = TRUE; } } wind_update( FALSE ); /* * Wait... */ event = Evnt_multi( MU_KEYBD|MU_BUTTON|MU_MESAG, 2, 1, 1, NULL, NULL, msg, 0L, &m, &key, &clicks ); wind_update( TRUE ); if( EvMessage() ) { switch( MsgType(msg) ) { case AC_OPEN: acc_open( (int *)msg ); break; case WM_TOPPED: case WM_NEWTOP: Wm_Topped( ( int *)msg ); doedit = can_edit( tree, edit_obj ); if( doedit && !cursor ) { objc_edit( tree, edit_obj, 0, (int *)&idx, ED_INIT ); cursor = TRUE; } break; case WM_SIZED: doedit = can_edit( tree, edit_obj ); /* fall through */ case WM_MOVED: /* if moving, that means we are on top, therefore, cursor is already on */ doedit = can_edit( tree, edit_obj ); if( !doedit ) cursor = FALSE; case WM_REDRAW: case WM_FULLED: case WM_ARROWED: case WM_HSLID: case WM_VSLID: /* redraw 'n' shit */ if( edit_obj && ( msg[0] == WM_REDRAW )) { NoEdit( edit_obj ); rect = ObRect( edit_obj ); objc_offset( tree, edit_obj, &rect.g_x, &rect.g_y ); /* The offsets will take care of the blinking cursor * area that needs to be redraw to erase it. */ rect.g_y -= 3; rect.g_w += 3; rect.g_h += 6; /* Clip the rectangle to the work area of the form.*/ rc_intersect( &w.work, &rect ); /* The redraw is necessary to turn off the blinking cursor. * We are going to need to send a redraw message to the calling * cpx in case they have any custom redraws that need to be done. */ Redraw_XForm_Do( &rect ); if( msg[0] == WM_REDRAW ) { for( idx = 0; idx < 8; idx++ ) puntmsg[idx] = msg[idx]; } } /* Here we redraw/move the area that is dirtied */ do_windows( (int *)msg, (int *)&event ); if( edit_obj ) MakeEditable( edit_obj ); doedit = can_edit( tree, edit_obj ); if( !doedit ) cursor = FALSE; if( msg[0] == WM_REDRAW ) { for( idx = 0; idx < 8; idx++ ) puntmsg[idx] = msg[idx]; return -1; } break; default:if( msg[0] == AC_CLOSE ) SetAccCloseState( TRUE ); if( msg[0] == AP_TERM ) { SetAccCloseState( TRUE ); msg[0] = AC_CLOSE; } if( msg[0] == WM_CLOSED ) SetWmCloseState( TRUE ); for( idx = 0; idx < 8; idx++ ) puntmsg[idx] = msg[idx]; return -1; } } /* * What about hot keys?? AIEEE!! */ if( EvKey() ) { /* * form_keybd() encapsulated here */ direction = NODIR; switch( key ) { case K_RETURN: case K_ENTER: next_obj = 0; direction = DEFAULTDIR; break; case K_BACKTAB: case K_UP: direction = BACKWARD; break; case K_TAB: case K_DOWN: direction = FORWARD; break; } if( direction != NODIR ) { key = 0; next_obj = find_obj( tree, edit_obj, direction ); if( (direction == DEFAULTDIR) && (next_obj != 0) ) { Objc_change( tree, next_obj, &w.work, ObState(next_obj)|SELECTED, TRUE ); cont = FALSE; } } /* * End of form_keybd() */ /* The above code clears 'key', therefore, we'll * check key FIRST, then test the ASCII and * scancode */ if( key && ( !( key & 0xff ) ) ) { if( ( key != K_UP ) && ( key != K_DOWN ) && ( key != K_RIGHT ) && ( key != K_LEFT ) && ( key != K_RETURN ) && ( key != K_ENTER ) && ( key != K_TAB ) && ( key != K_BACKTAB) ) { puntmsg[0] = CT_KEY; puntmsg[3] = key; return -1; } } if( key && doedit ) objc_edit( tree, edit_obj, key, (int *)&idx, ED_CHAR ); } if( EvButton() ) { next_obj = objc_find( tree, ROOT, MAX_DEPTH, m.x, m.y ); if( next_obj == NIL ) { Bconout( 2, 7 ); next_obj = 0; } else { cont = fm_button( tree, next_obj, clicks, &next_obj ); } } if( doedit && (!cont || (next_obj != 0)) && ( next_obj != edit_obj) ) { objc_edit( tree, edit_obj, 0, (int *)&idx, ED_END ); cursor = FALSE; } } return next_obj; }
void do_menu( const int *msg, int *event ) { WORD ret; WORD puntmsg[8]; WINFO *w; menu_tnormal( menu, MnTitle(msg), TRUE ); switch( MnItem(msg) ) { case TEST: ret = new_window( &w, tree ); if( ret == (int)ENHNDL ) { form_alert( 1, "[1][Sorry, no more windows| are available.|Please close one| you aren't using.][ OK ]" ); } else if( ret == (int)ENSMEM ) { form_alert( 1, "[1][Sorry, not enough| free memory for| another window.][ OK ]" ); } else { ++nwindows; ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; redraw( w, &w->work ); do { ret = xform_do( w, 0, puntmsg ); if( ret == -1 ) { switch( MsgType(puntmsg) ) { case MN_SELECTED: do_menu( (int *)puntmsg, event ); if( *event == 0 ) { ret = 0; } else { wind_get( 0, WF_TOP, &ret ); w = id_2winfo( ret ); if( w == NULL ) { form_alert( 1, "[3][Error topping window][ OK ]" ); ret = *event = 0; } else { ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; ret = -1; } } break; case WM_TOPPED: case WM_NEWTOP: w = id_2winfo( WmId(puntmsg) ); if( w == NULL ) { form_alert( 1, "[3][Error topping window][ OK ]" ); ret = *event = 0; } wind_set( w->id, WF_TOP ); ObX(ROOT) = w->work.g_x; ObY(ROOT) = w->work.g_y; break; case WM_CLOSED: wind_close( w->id ); wind_unlink( w ); wind_delete( w->id ); free( w ); --nwindows; ret = 0; break; } } else { wind_close( w->id ); wind_unlink( w ); wind_delete( w->id ); free( w ); } } while( ret == -1 ); Deselect(ret & 0x7fff); } break; case QUIT: *event = 0; break; } }