Beispiel #1
0
/* 根据不同命令ID编号,查编号handler对应表,得到函数入口,调用该函数*/
int sm_handler(int cmd_id, void *handler_para)
{
	fun_handler handler;
	int ret;
	int num_match;
	
	handler = 0;

	num_match = handler_get(cmd_id);
	if(num_match < 0)   
	{
	    logger(TLOG_NOTICE, "sm_handler cmd_id do not match, cmd_id=%d", cmd_id);
	    rountin_common_flag(CMD_ID_ERR_FORMAT_RES, MSG_RES_FLAG_ERR_FORMAT_CMD, 0, *(int *)handler_para);
		return -1;
    }
	
	handler = cmd2Handler[num_match].handler;
	ret = handler(handler_para);
	
	return 0;
}
Beispiel #2
0
int main(int argc, char *argv[])
{
	void *ctx, *socket, *pub;
	handler_t *handler;
	int rc; 
	char header[TOPS_MAX_HEADER_SIZE];
	
	ctx = zmq_init (1);
	// TODO: cmd line options for socket ports
	socket = zmq_socket (ctx, ZMQ_REP);
	rc = zmq_bind (socket, "tcp://*:9292");
	pub = zmq_socket (ctx, ZMQ_PUB);
	rc = zmq_bind  (pub, "tcp://*:9293");
	handler = handler_init ();
	
	while (1) {
		memset (header, 0, TOPS_MAX_HEADER_SIZE);
		zmq_recv (socket, header, TOPS_MAX_HEADER_SIZE, 0);
		//printf("DEBUG: %s\n", header);
		
		if (strcmp (header, TOPS_ADD) == 0) {
			rc = handler_add (handler, socket, pub);
		} else if (strcmp (header, TOPS_REM) == 0) {
			rc = handler_rem (handler, socket);
		} else if (strcmp (header, TOPS_GET) == 0) {
			rc = handler_get (handler, socket);
		} else {
			rc = handler_unknown (handler, socket);
		}
		
		if (rc != 0) {
			// TODO: asplode!
		}
	}
	handler_close (handler);
	zmq_close (socket);
	zmq_term (ctx);
	
	return 0;
}