Exemplo n.º 1
0
bool NetworkBaseUDP::receivePacketFromAddress(
    SOCKET Socket, NetworkPacket &Packet, sockaddr_in &Address, c8* RecvBuffer, u32 RecvBufferSize)
{
    s32 AddressSize = sizeof(Address);
    
    /* Receive network packet from raw address */
    s32 Result = recvfrom(
        Socket,
        RecvBuffer,
        RecvBufferSize,
        0,
        (sockaddr*)&Address,
        &AddressSize
    );
    
    if (Result == SOCKET_ERROR)
    {
        /* Check for error */
        #if defined(SP_PLATFORM_WINDOWS)
        const s32 ErrorCode = WSAGetLastError();
        if (ErrorCode != WSAEWOULDBLOCK)
            io::Log::error("Receiving network packet failed (Error code: " + io::stringc(ErrorCode) + ")");
        #endif
        
        return false;
    }
    
    /* Copy network packet */
    Packet = NetworkPacket(RecvBuffer, Result, 0, true);
    
    return true;
}
Exemplo n.º 2
0
void Network::SendPacket(NetworkPacket packet, const bool reliable)
{
	if(_isConnected)
	{
		ENetPacket* enetPacket = enet_packet_create(packet.GetBytes(), packet.GetSize(), reliable);
		if(!_isServer)
			enet_peer_send(_peer, 0, enetPacket);
		else
		{
			_mutex.lock();
			_receivedPackets.push_back(NetworkPacket(enetPacket,0));
			_mutex.unlock();
		}
	}
}
Exemplo n.º 3
0
void Network::PacketReciever()
{
	while (true)
	{
		_mutex.lock();

		enet_host_service (Network::GetInstance()->_host, & Network::GetInstance()->_event, 0);

		switch (Network::GetInstance()->_event.type)
		{
		case ENET_EVENT_TYPE_CONNECT:
			printf ("A new client connected from %x:%u.\n", 
				Network::GetInstance()->_event.peer -> address.host,
				Network::GetInstance()->_event.peer -> address.port);

			// Store any relevant client information here.

			Network::GetInstance()->_event.peer -> data = "Client information";
			break;
		case ENET_EVENT_TYPE_RECEIVE:
			//printf ("A packet of length %u containing %s was received from %s on channel %u.\n",
				Network::GetInstance()->_event.packet -> dataLength,
				Network::GetInstance()->_event.packet -> data,
				Network::GetInstance()->_event.peer -> data,
				Network::GetInstance()->_event.channelID;

			// Add to our list of received packets

			_receivedPackets.push_back(NetworkPacket(_event.packet, Network::GetInstance()->_event.peer -> address.host));

			// Clean up the packet now that we're done using it
			enet_packet_destroy (_event.packet);
			break;

		case ENET_EVENT_TYPE_DISCONNECT:
			printf ("%s disconected.\n", _event.peer -> data);
			// Reset the peer's client information.
			Network::GetInstance()->_event.peer -> data = NULL;
		}

		_mutex.unlock();
	}
}