Ejemplo n.º 1
0
/* LUA: new(fd, read, write, error)
	Pushes a new bufferevent instance on the stack
	Accepts: base, fd, read, write, error cb
	Requires base, fd and error cb
*/
static int buffer_event_push(lua_State* L) {
	le_bufferevent *ev;
	le_base* base = event_base_get(L, 1);
	/* NOTE: Should probably reference the socket as well... */
	int fd = getSocketFd(L, 2);
	luaL_checktype(L, 5, LUA_TFUNCTION);
	if(!lua_isnil(L, 3)) luaL_checktype(L, 3, LUA_TFUNCTION);
	if(!lua_isnil(L, 4)) luaL_checktype(L, 4, LUA_TFUNCTION);
	ev= (le_bufferevent*)lua_newuserdata(L, sizeof(le_bufferevent));
	luaL_getmetatable(L, BUFFER_EVENT_MT);
	lua_setmetatable(L, -2);
	ev->ev = bufferevent_new(fd, buffer_event_readcb, buffer_event_writecb, buffer_event_errorcb, ev);
	lua_createtable(L, 5, 0);
	lua_pushvalue(L, 3);
	lua_rawseti(L, -2, 1); // Read
	lua_pushvalue(L, 4);
	lua_rawseti(L, -2, 2); // Write
	lua_pushvalue(L, 5);
	lua_rawseti(L, -2, 3); // Err

	event_buffer_push(L, ev->ev->input);
	lua_rawseti(L, -2, READ_BUFFER_LOCATION);
	event_buffer_push(L, ev->ev->output);
	lua_rawseti(L, -2, WRITE_BUFFER_LOCATION);
	lua_setfenv(L, -2);
	ev->base = base;
	return 1;
}
Ejemplo n.º 2
0
Archivo: pet.c Proyecto: mmaizi/PET
//外网模式下,服务器在线测试
USER_FUNC void pingTest(void *arg) 
{
	while (getPingServerThreadFlag()) 
	{
		sleep(5);
		pingServer();
		sleep(120);
		u_printf("check ping result");
		if (getPingResultFlag()) 
		{
			//if ping result is correct
			setPingResultFlag(0);
		}
		else 
		{
			//若ping服务器无反应,则释放资源并让主板重新上线
			resetPingData();
			//关闭socket连接
			
			closeSocket(getSocketFd());

			sleep(10);
      //10s后主板开始重新上线
			initPingData();

			connectServer();

			loginServer();

			if (hfthread_create(recvTest, "RECV_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) 
			{
				u_printf("create recvMessage thread fail\n");

			}

			if (hfthread_create(pingTest, "PING_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) 
			{
				u_printf("create pingServer thread fail\n");

			}

		}
	}
}
Ejemplo n.º 3
0
/* sock, event, callback, timeout */
static int luaevent_addevent(lua_State* L) {
	int fd, event;
	le_callback* arg = event_callback_push(L, 1, 4);
	struct timeval *tv = &arg->timeout;
	if(lua_isnil(L, 2) && lua_isnumber(L, 5)) {
		fd = -1; /* Per event_timer_set.... */
	} else {
		fd = getSocketFd(L, 2);
	}
	event = luaL_checkinteger(L, 3);
	if(lua_isnumber(L, 5)) {
		double time = lua_tonumber(L, 5);
		load_timeval(time, tv);
	} else {
		tv = NULL;
	}

	/* Setup event... */
	arg->ev = *event_new(arg->base->base, fd, event | EV_PERSIST, luaevent_callback, arg);
	event_add(&arg->ev, tv);
	return 1;
}
Ejemplo n.º 4
0
/* return Wert:
   -1,0 : Fehler
   1 : Pipe ist ready
   2 : Socket lesbar
*/
int ueberwacheFd(int pipe_fd[],char *getText){
	//Observe the pi(p)e with the magic of Gandalf the Grey
	int socket_fd = getSocketFd();
	fd_set set;
	FD_ZERO(&set);
	FD_SET(pipe_fd[READ],&set);
	FD_SET(socket_fd,&set);
	int max = pipe_fd[READ];
	if (max < socket_fd) {
		max = socket_fd;
	}
	int ret = select(max+1,&set,NULL,NULL,NULL);
	
	if(ret < 1){
		log_printf(LOG_ERROR,"Fehler bei Select\n");
		perror("error");
		return 0;
	}
	else if (FD_ISSET(pipe_fd[READ],&set)) {
			log_printf(LOG_DEBUG,"Gandalf hat gedacht.\n");
			return pipe_read(pipe_fd, getText);		}
	log_printf(LOG_DEBUG,"Gandalf denkt zu langsam.\n");
	return 2;
}