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); }
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; }