dll_service.cpp 2.72 KB
#include <lib_include.h>
#include <lib_log.h>
#include <libmysql_iface.h>
#include <lib_proto/lib_msgbuf.h>

#include <bench_conf.h>

#include "func_rount.h"

static el::lib_mysql_if* g_db = NULL;
Cfunc_route* g_route_func = NULL;

#define VERSION_NUM "0.0.0.1"

extern "C" int on_init()
{
	if(el_async::is_parent()){
		DEBUG_LOG("======daemon start======");
	}else{
		DEBUG_LOG("======server start======");

        g_db = new el::lib_mysql_if(el_async::bench_conf_t::get_instance()->get_strval("mysql", "ip"),
                el_async::bench_conf_t::get_instance()->get_strval("mysql", "user"),
                el_async::bench_conf_t::get_instance()->get_strval("mysql", "passwd"),
                ::atoi(el_async::bench_conf_t::get_instance()->get_strval("mysql", "port").c_str()),
                true, el_async::bench_conf_t::get_instance()->get_strval("mysql", "unix_socket").c_str());
        g_db_name_pre = el_async::bench_conf_t::get_instance()->get_strval("mysql", "db_name_pre");

        g_route_func = new Cfunc_route(g_db);
	}
	return 0;
}

extern "C" int on_fini()
{
	if (el_async::is_parent()) {
		DEBUG_LOG("======daemon done======");
	}else{
		DEBUG_LOG("======server done======");
		SAFE_DELETE(g_db);
		SAFE_DELETE(g_route_func);
	}
	return 0;
}

extern "C" void on_events()
{
}

extern "C" int on_get_pkg_len(el::lib_tcp_peer_info_t* peer_fd_info,
							  const void* data, uint32_t len)
{
    if (len < proto_head_t::PROTO_HEAD_LEN){
        return 0;
    }
	
	char* c = (char*)data;
	PROTO_LEN pkg_len = EL_BYTE_SWAP((PROTO_LEN)(*(PROTO_LEN*)c));

    if (pkg_len < proto_head_t::PROTO_HEAD_LEN || pkg_len >= g_bench_conf->page_size_max){
        CRIT_LOG("pkg len error |%u", pkg_len);
        return -1;
    }

    if (len < pkg_len){
        return 0;
    }

    return pkg_len;
}

extern "C" int on_cli_pkg(const void* data, int len, el::lib_tcp_peer_info_t* peer_fd_info)
{
	g_route_func->do_handle_dispatcher(data, len, peer_fd_info);
	return 0;
}

extern "C" void on_srv_pkg(const void* data, int len,
						   el::lib_tcp_peer_info_t* peer_fd_info)
{
}


extern "C"  void on_cli_conn(el::lib_tcp_peer_info_t* peer_fd_info)
{
    DEBUG_LOG("[fd:%d] connected", peer_fd_info->fd);
}

extern "C" void on_cli_conn_closed(int fd)
{
	CRIT_LOG("[fd:%d]", fd);
}

extern "C" void on_svr_conn_closed(int fd)
{
}

extern "C" void on_svr_conn(int fd)
{
}

extern "C" void	on_mcast_pkg(const void* data, int len)
{
}

extern "C"  void on_addr_mcast_pkg(uint32_t id, const char* name,
								   const char* ip, uint16_t port, const char* data, int flag)
{
//	TRACE_LOG("id:%u, name:%s, ip:%s, port:%u, flag:%u", id, name, ip, port, flag);	
}

extern "C" void on_udp_pkg(int fd, const void* data, int len,
							struct sockaddr_in* from, socklen_t fromlen)
{
}