示例#1
0
文件: main.cpp 项目: lufb/code
/**
 *	cliToSrv -		从客户端向服务端转发数据
 *
 *	@hs			[in]	操作数
 *	
 *	return
 *		==0		正常,不需要关闭套接字
 *		<0		出错(包括有套接字关闭)
 */
int cliToSrv(SOCK_INFO &hs)
{
	int					ret;
	char				*pSend = NULL;
	
	ret = recv(hs.sock, hs.buffer+MAX_HTTPHEAD_SIZE, MAX_IOBUFFER_LEN, 0);
	if(ret <= 0)
		return BUILD_ERROR(_OSerrno(), ECCLOSE);

	ret = buildHttpData(hs.buffer+MAX_HTTPHEAD_SIZE,
						ret,
						MAX_HTTPHEAD_SIZE,
						&pSend,
						hs.usUnitSerial,
						hs.ulLinkNo);
	if(ret < 0)
		return ret;
	
	ret = sendToPeer(hs.peerSock, pSend, ret);
	if(ret != 0)
		return BUILD_ERROR(_OSerrno(), ESCLOSE);

	return 0;
}
示例#2
0
void GameServer::handlePacket(sf::Packet& packet, Peer& peer, bool& detectedTimeout)
{
    sf::Int32 packetType;
    packet >> packetType;

    switch (packetType)
    {
        case Packet::Login:
        {
            std::string username, password;
            packet >> username >> password;

            if (true)
            {
                peer.setName(username);

                ah::Application::instance() << "[Server] " + username + " joined the game";

                {
                    sf::Packet newPacket;
                    newPacket << Packet::ClientJoined << username;
                    sendToAll(newPacket);
                }

                std::vector<sf::Packet> packets;
                // packets loading
                for (std::size_t i = 0; i < packets.size(); i++)
                {
                    sendToPeer(packets[i],peer);
                }
            }
        } break;

        case Packet::Disconnect:
        {
            peer.setTimedOut(true);
            detectedTimeout = true;
        } break;

        case Packet::ClientMessage:
        {
            Message rMsg;
            packet >> rMsg;

            if (rMsg.isCommand())
            {
                // check permissions for the command
                // do the command

                Message msg;

                sf::Packet newPacket;
                newPacket << Packet::ServerMessage << msg;
                sendToPeer(newPacket,peer);
            }
            else if (!rMsg.isCommand())
            {
                sf::Packet newPacket;
                newPacket << Packet::ServerMessage << rMsg;
                sendToAll(newPacket);

                ah::Application::instance() << rMsg.getEmitter() + " : " + rMsg.getContent();
            }
        }

        default: break;
    }
}