예제 #1
0
CAMLexport value mltds_add_messages_server(value vconnection, value vlist)
{
  CAMLparam2(vconnection, vlist);
  CS_CONNECTION* conn = connection_ptr(vconnection);
  CS_INT msgcount;
  CS_INT msgno;

  retval_inspect(
    "ct_diag",
    ct_diag(conn, CS_STATUS, CS_SERVERMSG_TYPE, CS_UNUSED, &msgcount) );

  for(msgno = msgcount; msgno > 0; msgno--)
    vlist = cons(get_server_message(conn, msgno), vlist);

  retval_inspect(
    "ct_diag",
    ct_diag(conn, CS_CLEAR, CS_SERVERMSG_TYPE, CS_UNUSED, NULL) );

  CAMLreturn(vlist);
}
예제 #2
0
int main(int argc, char **argv)
{
	int last_heartbeat = 0, i = 0;
	fd_set fds;
	struct timeval tv;
		
	init();
	
	disconnected = 1;
	
	while (!quit) {
		if (disconnected) {
			init_connection(cfg.server_address, cfg.server_port);
			
			unsigned char str[256];

            int i, len = strlen(cfg.username) + strlen(cfg.password) + 3;

            if (len >= 40-2) {
                log_error ("Name or password too long!\n");
                return 0;
            }

            str[0] = LOG_IN;
            sprintf ((char *) (str+1), "%s %s", cfg.username, cfg.password);

            send_to_server (str, len);			
			disconnected = 0;
			
			FD_ZERO(&fds);
		}
		tv.tv_sec = 5;
		tv.tv_usec = 0;
		
		cur_time = SDL_GetTicks();
		
		while(i++ < 100 && !logged_in) {
		    get_server_message();
		    SDL_Delay(10);
        }
				
		get_server_message();
		
		// send a heartbeat every 25 seconds
		if (cur_time-(25 * 1000) >= last_heartbeat) {
            Uint8 str[1]; 
            str[0] = HEART_BEAT;           
			send_to_server(str, 1);
			
			last_heartbeat = cur_time;
		}
				
		// limit the length of a trade
		if (cfg.max_trade_time > 0 && trade.active && cur_time-cfg.max_trade_time >= trade.time) {
			abort_trade();
			send_pm("%s %s", trade.partner, "Sorry, the trade was taking too long.");
		}
				
		SDL_Delay (100);
	}
		
	return 0;
}