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);
	}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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 */
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
/* ................................................................
 * 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;
}
Esempio n. 6
0
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;
	}

}