示例#1
0
CmdResult SplitCommand::Handle(const std::vector<std::string>& parms, User* u)
{
	if (IS_LOCAL(u))
		return HandleLocal(parms, IS_LOCAL(u));
	if (IS_REMOTE(u))
		return HandleRemote(parms, IS_REMOTE(u));
	if (IS_SERVER(u))
		return HandleServer(parms, IS_SERVER(u));
	ServerInstance->Logs->Log("COMMAND", LOG_DEFAULT, "Unknown user type in command (uuid=%s)!", u->uuid.c_str());
	return CMD_INVALID;
}
void mythVirtualServer::acceptthread(){
	    /* Loop, waiting for network events */
    while (!m_stop) {
        /* Wait for events */
        SDLNet_CheckSockets(socketset, 10);

        /* Check for new connections */
        if ( SDLNet_SocketReady(servsock) ) {
            HandleServer();
        }

        /* Check for events on existing clients */
//#pragma omp parallel for
        for (int i=0; i< CHAT_MAXPEOPLE; ++i ) {
			if (SDLNet_SocketReady(people[i]->sock)) {
				//ServerDecodeCallBack(&people[i]);
                HandleClient(i);
            }
        }
    }
    cleanup(0);
}
示例#3
0
main(int argc, char *argv[])
{
	IPaddress serverIP;
	int i;

        /* Initialize SDL */
        if ( SDL_Init(0) < 0 ) {
                fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
                exit(1);
	}

	/* Initialize the network */
	if ( SDLNet_Init() < 0 ) {
		fprintf(stderr, "Couldn't initialize net: %s\n",
						SDLNet_GetError());
		SDL_Quit();
		exit(1);
	}

	/* Initialize the channels */
	for ( i=0; i<CHAT_MAXPEOPLE; ++i ) {
		people[i].active = 0;
		people[i].sock = NULL;
	}

	/* Allocate the socket set */
	socketset = SDLNet_AllocSocketSet(CHAT_MAXPEOPLE+1);
	if ( socketset == NULL ) {
		fprintf(stderr, "Couldn't create socket set: %s\n",
						SDLNet_GetError());
		cleanup(2);
	}
		
	/* Create the server socket */
	SDLNet_ResolveHost(&serverIP, NULL, CHAT_PORT);
printf("Server IP: %x, %d\n", serverIP.host, serverIP.port);
	servsock = SDLNet_TCP_Open(&serverIP);
	if ( servsock == NULL ) {
		fprintf(stderr, "Couldn't create server socket: %s\n",
						SDLNet_GetError());
		cleanup(2);
	}
	SDLNet_TCP_AddSocket(socketset, servsock);

	/* Loop, waiting for network events */
	for ( ; ; ) {
		/* Wait for events */
		SDLNet_CheckSockets(socketset, ~0);

		/* Check for new connections */
		if ( SDLNet_SocketReady(servsock) ) {
			HandleServer();
		}

		/* Check for events on existing clients */
		for ( i=0; i<CHAT_MAXPEOPLE; ++i ) {
			if ( SDLNet_SocketReady(people[i].sock) ) {
				HandleClient(i);
			}
		}
	}
	cleanup(0);

	/* Not reached, but fixes compiler warnings */
	return 0;
}
示例#4
0
文件: udpcs.cpp 项目: JammyWei/ver30
int main(int argc,char* argv[])
{
    int ret;
    int lport=0,rport=0;
    char* msg=NULL;
    int sock = -1;

    if(argc == 1)
    {
        fprintf(stderr,"%s OPTIONS\n",argv[1]);
        fprintf(stderr,"\tlport rport msg for client\n");
        fprintf(stderr,"\tlport for server\n");
        exit(3);
    }


    if(argc >= 4)
    {
        signal(SIGINT,SigHandler);
        signal(SIGTERM,SigHandler);
        signal(SIGPIPE,SIG_IGN);
        while(st_RunLoop)
        {
            lport =atoi(argv[1]);
            rport = atoi(argv[2]);
            msg = argv[3];

			DEBUG_INFO("\n");
            sock = BindUdp(lport);
            if(sock < 0)
            {
                ret = sock;
				DEBUG_INFO("bind error %d\n",ret);
                goto out;
            }

            ret = HandleClient(sock,rport,msg);
			close(sock);
			sock = -1;
			sleep(1);
			DEBUG_INFO("\n");
        }
    }
    else
    {
        lport = atoi(argv[1]);
        sock = BindUdp(lport);
        if(sock < 0)
        {
            ret = sock;
            goto out;
        }

        ret = daemon(0,0);
        if(ret < 0)
        {
            ret = LAST_ERROR_CODE();
            goto out;
        }

        signal(SIGINT,SigHandler);
        signal(SIGTERM,SigHandler);
        signal(SIGPIPE,SIG_IGN);

        ret = HandleServer(sock);

    }

out:
    if(sock >= 0)
    {
        close(sock);
    }
    sock = -1;
    return ret;
}