int main(int argc, char **argv) { zn_Timer *t1, *t2; strcpy(addr, "127.0.0.1"); if (argc == 2) { unsigned p = atoi(argv[1]); if (p != 0) port = p; } else if (argc == 3) { unsigned p = atoi(argv[2]); strcpy(addr, argv[1]); if (p != 0) port = p; } init_data(); zn_initialize(); S = zn_newstate(); zn_initbuffpool(&pool); if (S == NULL) return 2; t1 = zn_newtimer(S, on_timer, NULL); zn_starttimer(t1, INTERVAL); t2 = zn_newtimer(S, on_client, NULL); zn_starttimer(t2, 0); return zn_run(S, ZN_RUN_LOOP); }
int main(int argc, char **argv) { unsigned port = 12345; zn_Accept *accept; zn_Timer *timer; if (argc == 2) { unsigned p = atoi(argv[1]); if (p != 0) port = port; } zn_initialize(); S = zn_newstate(); zn_initbuffpool(&pool); if (S == NULL) return 2; accept = zn_newaccept(S); if (accept == NULL) return 2; zn_listen(accept, "0.0.0.0", port); zn_accept(accept, on_accept, NULL); printf("listening at: %u\n", port); timer = zn_newtimer(S, on_timer, NULL); zn_starttimer(timer, INTERVAL); return zn_run(S, ZN_RUN_LOOP); }
inline TimerID EventLoop::createTimer(zn_Time delayms, OnTimerHandler&& h) { auto t = zn_newtimer(S, timer_cb, this); timers[t] = std::move(h); zn_starttimer(t, delayms); return t; }
static void on_summary(void *ud, zn_Timer *timer, unsigned elapsed) { printf("%u: ", zn_time()); if (is_client) print_ud(&client, "client"); else print_ud(&server, "server"); printf("\n"); zn_starttimer(timer, 1000); }
static int Ltimer_start(lua_State *L) { lzn_Timer *obj = (lzn_Timer*)lbind_check(L, 1, &lbT_Timer); lua_Integer delayms = luaL_optinteger(L, 2, 0); if (!obj->timer) return 0; if (delayms < 0) delayms = 0; obj->delayms = (unsigned)delayms; if (zn_starttimer(obj->timer, obj->delayms)) lzn_ref(L, 1, &obj->ref); lbind_returnself(L); }
int main(int argc, const char **argv) { int i, client_count = 1; if (argc == 2 && strcmp(argv[1], "-h") == 0) { printf("usage: %s [(client/server) [ip [port]]]\n", argv[0]); exit(0); } if (argc > 1) { size_t n = strlen(argv[1]); if (n >= 6 && memcmp(argv[1], "client", 6) == 0) { is_client = 1; if (n > 6) client_count = atoi(argv[1] + 6); } } if (argc > 2) { strncpy(addr, argv[2], ZN_MAX_ADDRLEN-1); } if (argc > 3) { unsigned p = atoi(argv[3]); if (p != 0) port = p; } zn_initialize(); printf("znet engine: %s\n", zn_engine()); if ((S = zn_newstate()) == NULL) return 2; zn_initbuffpool(&pool); { unsigned short dlen = htons(BLOCK_SIZE-2); memcpy(send_data, &dlen, 2); } if (is_client) { printf("client count: %d\n", client_count); printf("connecting to %s:%d ...\n", addr, port); for (i = 0; i < client_count; ++i) zn_post(S, new_connection, NULL); } else { zn_Accept *accept; if ((accept = zn_newaccept(S)) == NULL) return 2; zn_listen(accept, addr, port); zn_accept(accept, on_accept, NULL); printf("listening at %s:%d ...\n", addr, port); } zn_starttimer(zn_newtimer(S, on_summary, NULL), 1000); register_interrupted(); return zn_run(S, ZN_RUN_LOOP); }
static zn_Time lzn_ontimer(void *ud, zn_Timer *timer, zn_Time elapsed) { lzn_Timer *obj = (lzn_Timer*)ud; lua_State *L = obj->L; lua_rawgeti(L, LUA_REGISTRYINDEX, obj->ontimer_ref); lua_rawgeti(L, LUA_REGISTRYINDEX, obj->ref); lua_pushinteger(L, (lua_Integer)elapsed); if (lbind_pcall(L, 2, 1) != LUA_OK) { fprintf(stderr, "%s\n", lua_tostring(L, -1)); lzn_unref(L, &obj->ref); } else if (lua_isinteger(L, -1)) { lua_Integer ret = lua_tointeger(L, -1); return ret >= 0 ? (zn_Time)ret : 0; } else if (lua_toboolean(L, -1)) zn_starttimer(timer, obj->delayms); else lzn_unref(L, &obj->ref); lua_pop(L, 1); return 0; }
int main(int argc, const char **argv) { if (argc == 2 && strcmp(argv[1], "-h") == 0) { printf("usage: %s [(client/server) [ip [port]]]\n", argv[0]); exit(0); } if (argc > 1) { if (strcmp(argv[1], "client") == 0) is_client = 1; } if (argc > 2) { strncpy(addr, argv[2], ZN_MAX_ADDRLEN-1); } if (argc > 3) { unsigned p = atoi(argv[3]); if (p != 0) port = p; } zn_initialize(); if ((S = zn_newstate()) == NULL) return 2; if (is_client) { zn_Tcp *tcp; if ((tcp = zn_newtcp(S)) == NULL) return 2; zn_connect(tcp, addr, port, on_connect, NULL); printf("connecting to %s:%d ...\n", addr, port); } else { zn_Accept *accept; if ((accept = zn_newaccept(S)) == NULL) return 2; zn_listen(accept, addr, port); zn_accept(accept, on_accept, NULL); printf("listening at %s:%d ...\n", addr, port); } zn_starttimer(zn_newtimer(S, on_summary, NULL), 1000); register_interrupted(); return zn_run(S, ZN_RUN_LOOP); }