void pc_client_destroy(pc_client_t *client) { pc_client_state state; uv_mutex_lock(&client->state_mutex); state = client->state; uv_mutex_unlock(&client->state_mutex); if(PC_ST_INITED == client->state) { goto finally; } if(PC_ST_CLOSED == client->state) { goto finally; } pc_client_disconnect(client); pc_client_join(client); finally: pc__client_clear(client); if(client->uv_loop) { uv_loop_delete(client->uv_loop); client->uv_loop = NULL; } pc_jsonp_free(client); }
int main() { pc_lib_init(NULL, NULL, NULL, NULL); client = (pc_client_t*)malloc(pc_client_size()); PC_TEST_ASSERT(client); pc_client_config_t config = PC_CLIENT_CONFIG_DEFAULT; config.local_storage_cb = local_storage_cb; pc_client_init(client, (void*)0x11, &config); PC_TEST_ASSERT(pc_client_ex_data(client) == (void*)0x11); PC_TEST_ASSERT(pc_client_state(client) == PC_ST_INITED); pc_client_add_ev_handler(client, PC_EV_USER_DEFINED_PUSH, EV_HANDLER_EX, SERVER_PUSH, event_cb); pc_client_add_ev_handler(client, PC_EV_CONNECTED , EV_HANDLER_EX, NULL, event_cb); pc_client_add_ev_handler(client, PC_EV_CONNECT_ERROR, EV_HANDLER_EX, NULL, event_cb); pc_client_add_ev_handler(client, PC_EV_CONNECT_FAILED , EV_HANDLER_EX, NULL, event_cb); pc_client_add_ev_handler(client, PC_EV_DISCONNECT , EV_HANDLER_EX, NULL, event_cb); pc_client_add_ev_handler(client, PC_EV_KICKED_BY_SERVER, EV_HANDLER_EX, NULL, event_cb); pc_client_add_ev_handler(client, PC_EV_UNEXPECTED_DISCONNECT, EV_HANDLER_EX, NULL, event_cb); pc_client_add_ev_handler(client, PC_EV_PROTO_ERROR , EV_HANDLER_EX, NULL, event_cb); pc_client_connect(client, "127.0.0.1", 3010, NULL); SLEEP(1); pc_request_with_timeout(client, REQ_ROUTE, REQ_MSG, REQ_EX, REQ_TIMEOUT, request_cb); pc_notify_with_timeout(client, NOTI_ROUTE, NOTI_MSG, NOTI_EX, NOTI_TIMEOUT, notify_cb); SLEEP(50); pc_client_disconnect(client); pc_client_cleanup(client); PC_TEST_ASSERT(pc_client_state(client) == PC_ST_NOT_INITED); free(client); pc_lib_cleanup(); return 0; }
void test3() { pc_client_config_t config = PC_CLIENT_CONFIG_DEFAULT; int handler_id; pc_lib_init(NULL, NULL, NULL, NULL); client = (pc_client_t*)malloc(pc_client_size()); TEST_ASSERT(client); config.local_storage_cb = local_storage_cb; pc_client_init(client, (void*)0x11, &config); TEST_ASSERT(pc_client_ex_data(client) == (void*)0x11); TEST_ASSERT(pc_client_state(client) == PC_ST_INITED); handler_id = pc_client_add_ev_handler(client, event_cb, EV_HANDLER_EX, NULL); pc_client_connect(client, "127.0.0.1", 3010, NULL); SLEEP(1); if(0) { const char* sRoute = "connector.connectorHandler.entry"; const char* sMsg = "{\"name\": \"test\"}"; pc_request_with_timeout(client, sRoute, sMsg, (void*)101, REQ_TIMEOUT, request_cb); } if(1) { const char* sRoute = "room.roomHandler.test"; const char* sMsg = "{\"name\": \"请求\"}"; char pBuff[1024]; if(1) { int nUseLen = GbToUtf(sMsg, strlen(sMsg), pBuff, 1024); TEST_ASSERT(nUseLen > 0); pBuff[nUseLen] = '\0'; sMsg = pBuff; } pc_request_with_timeout(client, sRoute, sMsg, (void*)102, REQ_TIMEOUT, request_cb); } //pc_notify_with_timeout(client, NOTI_ROUTE, NOTI_MSG, NOTI_EX, NOTI_TIMEOUT, notify_cb); SLEEP(50); pc_client_disconnect(client); pc_client_rm_ev_handler(client, handler_id); pc_client_cleanup(client); TEST_ASSERT(pc_client_state(client) == PC_ST_NOT_INITED); free(client); pc_lib_cleanup(); }