int main(int argc,char **argv){ signal(SIGPIPE,SIG_IGN); e = engine_new(); sockaddr_ server; easy_sockaddr_ip4(&server,argv[1],atoi(argv[2])); uint32_t size = atoi(argv[3]); uint32_t i = 0; for( ; i < size; ++i){ int32_t fd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); easy_noblock(fd,1); int32_t ret; if(0 == (ret = easy_connect(fd,&server,NULL))) on_connected(fd,0,e); else if(ret == -EINPROGRESS){ connector *c = connector_new(fd,e,2000); engine_associate(e,c,on_connected); }else{ close(fd); printf("connect to %s %d error\n",argv[1],atoi(argv[2])); } } //engine_regtimer(e,1000,timer_callback,NULL); engine_run(e); return 0; }
/** * Build a new list of connectors starting from the Tconnectors * in the list pointed to by e. Keep only those whose strings whose * direction has the value c. */ static Connector * extract_connectors(Tconnector *e, int c) { Connector *e1; if (e == NULL) return NULL; if (e->dir == c) { e1 = connector_new(); e1->next = extract_connectors(e->next,c); e1->multi = e->multi; e1->string = e->string; e1->word = 0; return e1; } else { return extract_connectors(e->next,c); } }
/** * Build a new list of connectors starting from the Tconnectors * in the list pointed to by e. Keep only those whose strings whose * direction has the value c. */ static Connector * extract_connectors(Tconnector *e, int c) { Connector *e1; if (e == NULL) return NULL; if (e->dir == c) { e1 = connector_new(); e1->next = extract_connectors(e->next,c); e1->multi = e->multi; e1->string = e->string; e1->label = NORMAL_LABEL; e1->priority = THIN_priority; e1->word = 0; return e1; } else { return extract_connectors(e->next,c); } }
/** * main function **/ int main(int argc, char ** argv) { int ret; int serviceid = 80; g_server = server_new(); atexit(stop); signal(SIGINT, terminate); ServicesFactory *factory = servicesfactory_new(); servicesfactory_add(factory, serviceid, NULL, serviceinet_new); Connector *connector = connector_new(factory, serviceid); connector_readparameters(connector, argv, argc); server_addconnector(g_server, connector); ret = server_main(g_server); server_destroy(g_server); servicesfactory_destroy(factory); return ret; }
/** * Put into the set S all of the dir-pointing connectors still in e. * Return a list of allocated dummy connectors; these will need to be * freed. */ static Connector * insert_connectors(connector_table *ct, Exp * e, Connector *alloc_list, int dir) { if (e->type == CONNECTOR_type) { if (e->dir == dir) { Connector *dummy = connector_new(); dummy->string = e->u.string; insert_connector(ct, dummy); dummy->next = alloc_list; alloc_list = dummy; } } else { E_list *l; for (l=e->u.l; l!=NULL; l=l->next) { alloc_list = insert_connectors(ct, l->e, alloc_list, dir); } } return alloc_list; }
int main(int argc, char **argv) { /* open log */ if (0 != LOG_OPEN("./center", LOG_LEVEL_DEBUG, -1)) { fprintf(stderr, "open center log failed!\n"); return 1; } if (0 != check_cmd()) { return 1; } /* protobuf verify version */ GOOGLE_PROTOBUF_VERIFY_VERSION; struct event_base *main_base = event_base_new(); if (NULL == main_base) { mfatal("main_base = event_base_new() failed!"); return 1; } conn_init(); /* thread */ pthread_t worker[WORKER_NUM]; thread_init(main_base, WORKER_NUM, worker); /* signal */ struct event *signal_event; signal_event = evsignal_new(main_base, SIGINT, signal_cb, (void *)main_base); if (NULL == signal_event || 0 != event_add(signal_event, NULL)) { mfatal("create/add a signal event failed!"); return 1; } /* listener for gate */ struct sockaddr_in sa; bzero(&sa, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_addr.s_addr = htonl(INADDR_ANY); sa.sin_port = htons(44000); listener *lg = listener_new(main_base, (struct sockaddr *)&sa, sizeof(sa), gate_cb); if (NULL == lg) { mfatal("create client listener failed!"); return 1; } /* connector to center */ struct sockaddr_in csa; bzero(&csa, sizeof(csa)); csa.sin_family = AF_INET; csa.sin_addr.s_addr = inet_addr("127.0.0.1"); csa.sin_port = htons(43001); connector *ce = connector_new((struct sockaddr *)&csa, sizeof(csa), center_cb); if (NULL == ce) { mfatal("create center connector failed!"); return 1; } event_base_dispatch(main_base); for (int i = 0; i < WORKER_NUM; i++) pthread_join(worker[i], NULL); connector_free(ce); listener_free(lg); event_free(signal_event); event_base_free(main_base); /* shutdown protobuf */ google::protobuf::ShutdownProtobufLibrary(); /* close log */ LOG_CLOSE(); return 0; }