Beispiel #1
0
kn_epoll* kn_epoll_new()
{
	int epfd = epoll_create(kn_max_proactor_fd);
	if(epfd < 0) return NULL;	
	kn_epoll *ep = calloc(1,sizeof(*ep));
	ep->epfd = epfd;
	ep->maxevents = 1024;
	ep->events = calloc(1,(sizeof(*ep->events)*ep->maxevents));
	kn_dlist_init(&ep->base.actived[0]);
	kn_dlist_init(&ep->base.actived[1]);
	ep->base.actived_index = 0;
	ep->base.Loop = kn_epoll_loop;
	ep->base.Register = kn_epoll_register;
	ep->base.UnRegister = kn_epoll_unregister;
	ep->base.addRead = addRead;
	ep->base.delRead = delRead;
	ep->base.addWrite = addWrite;
	ep->base.delWrite = delWrite;
	ep->base.reg_timer = kn_proactor_reg_timer;
	ep->base.timermgr = kn_new_timermgr();
	ep->timerfd = kn_new_timerfd(1000);
	kn_epoll_register((kn_proactor_t)ep,ep->timerfd);
	testaddr = (void*)ep;
	return ep;
}
Beispiel #2
0
kn_epoll* kn_epoll_new()
{
	int epfd = epoll_create(kn_max_proactor_fd);
	if(epfd < 0) return NULL;	
	kn_epoll *ep = calloc(1,sizeof(*ep));
	ep->epfd = epfd;
	ep->maxevents = 1024;
	ep->events = calloc(1,(sizeof(*ep->events)*ep->maxevents));
	kn_dlist_init(&ep->base.actived[0]);
	kn_dlist_init(&ep->base.actived[1]);
	ep->base.actived_index = 0;
	kn_dlist_init(&ep->base.connecting);
	ep->base.Loop = kn_epoll_loop;
	ep->base.Register = kn_epoll_register;
	ep->base.UnRegister = kn_epoll_unregister;
	testaddr = (void*)ep;
	return ep;
}
Beispiel #3
0
kn_msgque_t kn_new_msgque(int buffsize){
	kn_msgque* msgque = calloc(1,sizeof(*msgque));
	if(buffsize < 0) buffsize = 0;
	msgque->buffsize = buffsize;
	msgque->mtx = kn_mutex_create();
	pthread_key_create(&msgque->tkey,NULL);
	kn_list_init(&msgque->shareque);
	kn_dlist_init(&msgque->waits);
	refobj_init((refobj*)msgque,msgque_destructor);
	return make_ident((refobj*)msgque);
}
Beispiel #4
0
AStar_t create_AStar(int xsize,int ysize,int *flags){
	AStar_t astar = calloc(1,sizeof(*astar)+sizeof(AStarNode)*xsize*ysize);
	astar->open_list = minheap_create(xsize*ysize,_less);
	kn_dlist_init(&astar->close_list);
	kn_dlist_init(&astar->neighbors);
	astar->xcount = xsize;
	astar->ycount = ysize;
	int i = 0;
	int j = 0;
	for( ; i < ysize; ++i)
	{
		for(j = 0; j < xsize;++j)
		{		
			AStarNode *tmp = &astar->map[i*xsize+j];
			tmp->x = j;
			tmp->y = i;
			tmp->block = flags[i*xsize+j];
		}
	}	
	return astar;
}
Beispiel #5
0
kn_CURLM_t kn_CURLM_init(engine_t e){
	pthread_once(&g_curl_key_once,curl_once_routine);
	CURLM *c = curl_multi_init();
	if(!c) return NULL;
	kn_CURLM_t cm = calloc(1,sizeof(*cm));
	cm->c_handle = c;
	cm->e = e;
	kn_dlist_init(&cm->curls);
	curl_multi_setopt(c, CURLMOPT_SOCKETFUNCTION, handle_socket);
    	//curl_multi_setopt(c, CURLMOPT_TIMERDATA, cm);	
	//curl_multi_setopt(c, CURLMOPT_TIMERFUNCTION, start_timeout);	
	return cm;
}
Beispiel #6
0
static int lua_findpath(lua_State *L){
	AStar_t astar = lua_touserdata(L,1);
	int x1 = lua_tonumber(L,2);
	int y1 = lua_tonumber(L,3);
	int x2 = lua_tonumber(L,4);
	int y2 = lua_tonumber(L,5);
	kn_dlist path;kn_dlist_init(&path);
	if(find_path(astar,x1,y1,x2,y2,&path)){
		int i = 1;
		lua_newtable(L);
		AStarNode *n;
		while((n = (AStarNode*)kn_dlist_pop(&path))){
			lua_newtable(L);
			lua_pushinteger(L,n->x);
			lua_rawseti(L,-2,1);
			lua_pushinteger(L,n->y);
			lua_rawseti(L,-2,2);
			lua_rawseti(L,-2,i++);	
		}
	}else
		lua_pushnil(L);
	return 1;
}