public void MessageReceivedHandler(byte[] buffer)
 {
     using (var messageBuffer = MessageBuffer.Create(buffer.Length))
     {
         Buffer.BlockCopy(buffer, 0, messageBuffer.Buffer, 0, buffer.Length);
         messageBuffer.Count = buffer.Length;
         HandleMessageReceived(messageBuffer, SendMode.Reliable);
     }
 }
    public void HandleEnetMessageReceived(Event netEvent, SendMode mode)
    {
        MessageBuffer message = MessageBuffer.Create(netEvent.Packet.Length);

        netEvent.Packet.CopyTo(message.Buffer);
        message.Offset = 0;
        message.Count  = netEvent.Packet.Length;
        HandleMessageReceived(message, SendMode.Reliable);
    }
 private void OnReceivedByteArrayMessage(byte[] bytes)
 {
     using (var messageBuffer = MessageBuffer.Create(bytes.Length))
     {
         Buffer.BlockCopy(bytes, 0, messageBuffer.Buffer, 0, bytes.Length);
         messageBuffer.Count = bytes.Length;
         HandleMessageReceived(messageBuffer, SendMode.Reliable);
     }
 }
Exemple #4
0
 public void ProcessData(byte[] MessageData, int Length, bool reliable)
 {
     using (MessageBuffer buffer = MessageBuffer.Create(Length))
     {
         Buffer.BlockCopy(MessageData, 0, buffer.Buffer, 0, Length);
         buffer.Count = Length;
         HandleMessageReceived(buffer, reliable ? SendMode.Reliable : SendMode.Unreliable);
     }
 }
    private void HandleEnetMessageReceived(Event netEvent, SendMode mode)
    {
        MessageBuffer message = MessageBuffer.Create(netEvent.Packet.Length);

        netEvent.Packet.CopyTo(message.Buffer);
        message.Offset = 0;
        message.Count  = netEvent.Packet.Length;
        HandleMessageReceived(message, mode);
        message.Dispose();
    }
Exemple #6
0
        private void MessageReceivedHandler(byte[] buffer)
        {
            if (_connectionState != ConnectionState.Connected)
            {
                return;
            }

            using (var messageBuffer = MessageBuffer.Create(buffer.Length))
            {
                Buffer.BlockCopy(buffer, 0, messageBuffer.Buffer, 0, buffer.Length);
                messageBuffer.Count = buffer.Length;
                HandleMessageReceived(messageBuffer, SendMode.Reliable);
            }
        }
Exemple #7
0
    public void Update()
    {
        if (socket != null)
        {
            byte[] data = socket.Recv();
            if (data == null || data.Length == 0)
            {
                return;
            }

            using (MessageBuffer buffer = MessageBuffer.Create(data.Length))
            {
                Buffer.BlockCopy(data, 0, buffer.Buffer, 0, data.Length);
                buffer.Count = data.Length;
                HandleMessageReceived(buffer, SendMode.Reliable);
            }
        }
    }
Exemple #8
0
        /// <summary>
        ///     Called when a new UDP packet is received on the listening port.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UdpMessageReceived(object sender, SocketAsyncEventArgs e)
        {
            //Copy over buffer and remote endpoint
            bool completingAsync;

            do
            {
                using (MessageBuffer buffer = MessageBuffer.Create(e.BytesTransferred))
                {
                    Buffer.BlockCopy(e.Buffer, 0, buffer.Buffer, buffer.Offset, e.BytesTransferred);
                    buffer.Count = e.BytesTransferred;

                    EndPoint remoteEndPoint = e.RemoteEndPoint;

                    //Start listening again
                    try
                    {
                        completingAsync = UdpListener.ReceiveFromAsync(e);
                    }
                    catch (ObjectDisposedException)
                    {
                        return;
                    }

                    //Handle message or new connection
                    BichannelServerConnection connection;
                    bool exists;
                    lock (UdpConnections)   // TODO remove lock please
                        exists = UdpConnections.TryGetValue(remoteEndPoint, out connection);

                    if (exists)
                    {
                        connection.HandleUdpMessage(buffer);
                    }
                    else
                    {
                        HandleUdpConnection(buffer, remoteEndPoint);
                    }
                }
            }while (!completingAsync);
        }
        /// <summary>
        ///     Called when a UDP message is received on the fallback system.
        /// </summary>
        /// <param name="result">The result of the operation.</param>
        private void UdpMessageReceived(IAsyncResult result)
        {
            EndPoint remoteEndPoint = new IPEndPoint(Address.AddressFamily == AddressFamily.InterNetworkV6 ? IPAddress.IPv6Any : IPAddress.Any, 0);
            int      bytesReceived;

            try
            {
                bytesReceived = UdpListener.EndReceiveFrom(result, ref remoteEndPoint);
            }
            catch (SocketException)
            {
                UdpListener.BeginReceiveFrom((byte[])result.AsyncState, 0, ushort.MaxValue, SocketFlags.None, ref remoteEndPoint, UdpMessageReceived, (byte[])result.AsyncState);
                return;
            }

            //Copy over buffer and remote endpoint
            using (MessageBuffer buffer = MessageBuffer.Create(bytesReceived))
            {
                Buffer.BlockCopy((byte[])result.AsyncState, 0, buffer.Buffer, buffer.Offset, bytesReceived);
                buffer.Count = bytesReceived;

                //Start listening again
                UdpListener.BeginReceiveFrom((byte[])result.AsyncState, 0, ushort.MaxValue, SocketFlags.None, ref remoteEndPoint, UdpMessageReceived, (byte[])result.AsyncState);

                //Handle message or new connection
                BichannelServerConnection connection;
                bool exists;
                lock (UdpConnections)
                    exists = UdpConnections.TryGetValue(remoteEndPoint, out connection);

                if (exists)
                {
                    connection.HandleUdpMessage(buffer);
                }
                else
                {
                    HandleUdpConnection(buffer, remoteEndPoint);
                }
            }
        }
    public void Update()
    {
        uint Length;
        int  Channel;

        while (PacketAvailable(out Length, out Channel))
        {
            CSteamID Sender;
            uint     RealLength;
            if (SteamNetworking.ReadP2PPacket(RecvData, Length, out RealLength, out Sender, Channel))
            {
                if (Sender.m_SteamID == LobbyOwner.m_SteamID)
                {
                    using (MessageBuffer buffer = MessageBuffer.Create((int)RealLength))
                    {
                        Buffer.BlockCopy(RecvData, 0, buffer.Buffer, 0, (int)RealLength);
                        buffer.Count = (int)RealLength;
                        HandleMessageReceived(buffer, Channel == 1 ? SendMode.Reliable : SendMode.Unreliable);
                    }
                }
            }
        }
    }