static inline void delete_server(tcp_server_t *server) { if (server->is_started) { tcp_server_stop(server); } free(server); return; }
int main(void) { tcp_server_data_t * server; tcp_client_data_t * client; int i; char message[MAX_BUFFER_LEN]; i= 0; server = tcp_server_data_new(); strcpy(server->port,"8675"); client = tcp_client_data_new(); strcpy(client->dest_ip_address,"localhost"); strcpy(client->port,"8675"); tcp_server_start(server); tcp_client_start(client); printf("testing server and client with 5 messages\n"); while(i<5) { sleep(1); sprintf(message, "ack from client %d\n",i); thread_copy_to_buffer(client->send_buffer, message); sprintf(message, "boo form server %d\n",i); thread_copy_to_buffer(server->send_buffer, message); i++; } printf("shutting down! this isnt pretty yet, but its ok :) \n"); tcp_client_stop(client); tcp_client_data_free(client); tcp_server_stop(server); tcp_server_data_free(server); printf("goodbye!\n"); return 0; }
int main(int argc, char** argv) { char path[50] = { 0x00 }; if (2 <= argc) { strncpy(path, argv[1], strlen(argv[1])); } else { strncpy(path, "server.cfg", 10); } //读取配置文件 TinyConf* config; char* run; for(;;) { config = conf_open(path, '='); if(NULL == config) { sleep(5); continue; } run = conf_get(config, "run"); if(0 >= strlen(run)) { sleep(5); continue; } if(0 != strcmp(run, "on")) { sleep(5); continue; } break; //一切ok,启动正常处理 } //初始化mysql配置 char* mysql_host = conf_get(config, "mysql_host"); char* mysql_port_str = conf_get(config, "mysql_port"); char* mysql_user = conf_get(config, "mysql_user"); char* mysql_password = conf_get(config, "mysql_password"); char* mysql_database = conf_get(config, "mysql_database"); //将数据库设置存入到map中 TinyMap* store_map = map_create(); map_add(store_map, "host", mysql_host, NULL); map_add(store_map, "port", mysql_port_str, NULL); map_add(store_map, "user", mysql_user, NULL); map_add(store_map, "password", mysql_password, NULL); map_add(store_map, "database", mysql_database, NULL); //初始化tcpserver的相关代码 int tcp_port = 7000; char* tcp_port_str = conf_get(config, "port"); if(0 < strlen(tcp_port_str)) { tcp_port = atoi(tcp_port_str); } TCPServer* tcp_server = tcp_server_create(tcp_port); //生成tcp服务器实例 if(NULL == tcp_server) { fprintf(stderr, "Create server falied.\n"); } tcp_server_set_proc_callback(tcp_server, store_map, analyze_proc); //注册数据处理的回调函数 tcp_server_set_timeout_callback(tcp_server, store_map, analyze_timeout); //注册客户端连接超时的回调函数 int ret = tcp_server_start(tcp_server); //启动tcp服务器 if(-1 == ret) { fprintf(stderr, "Start tcpserver falied.\n"); return 0; } //创建存储实例 Store* store = store_create(mysql_host, atoi(mysql_port_str), mysql_user, mysql_password, mysql_database); //创建网络检测线程 pthread_t thread_id; int p_ret = pthread_create(&thread_id, NULL, (void*)check_networks, store); if(0 != p_ret) { fprintf(stderr, "%s\n", "create networks check thread err."); } for(;;) { //阻塞 sleep(1000); } pthread_cancel(thread_id); //退出线程 store_destroy(store); //销毁存储实例 tcp_server_stop(tcp_server); //停止tcp服务器实例 tcp_server_destroy(tcp_server); //销毁tcp服务器实例 map_destroy(store_map); //销毁store_map实例 conf_close(config); //关闭配置信息读取实例 return 0; }
void rpc_finish(struct rpc *rpc) { if (rpc->tcpserver) { tcp_server_stop(rpc->tcpserver); } }