Esempio n. 1
0
        void listener_DataReceivedEvent(UdpClient sender, ReceivedDataArgs args)
        {
            string message = Encoding.ASCII.GetString(args.ReceivedBytes);

            Console.WriteLine("Received message from: " + args.IpAddress.ToString() + ", Port: " + args.Port.ToString() + ", Message: " + message);

            IPEndPoint ep = new IPEndPoint(args.IpAddress, args.Port);

            if (message.StartsWith("000"))
            {
                // New client needs an ID
                int playerId = gameControlCenter.AddNewPlayer(ep);
                // todo if we save stats for next login we can pass saved player coords back here
                Console.WriteLine("New player with id " + playerId);
                var dg = Encoding.ASCII.GetBytes("000;" + playerId);
                sender.Send(dg, dg.Length, ep);
            }
            else if (message.StartsWith("001"))
            {
                // Receiving client position and actions (package)
                String confirmationString = gameControlCenter.UpdatePlayerState(message);
                if (!confirmationString.Equals("-1"))
                {
                    Console.WriteLine("Answer to package from Client => " + confirmationString);
                    var dg = Encoding.ASCII.GetBytes(confirmationString);
                    sender.Send(dg, dg.Length, ep);
                }
            }
            else if (message.StartsWith("002"))
            {
                Console.WriteLine("LOOOOL");
            }
        }
Esempio n. 2
0
 private void RaiseDataReceived(ReceivedDataArgs args)
 {
     if (DataReceivedEvent != null)
     {
         DataReceivedEvent(udpClient, args);
     }
 }
Esempio n. 3
0
        private void Listener_DataReceived(ReceivedDataArgs receivedDataArgs)
        {
            if (_listeningClientsSet.Count == 0)
            {
                return;
            }
            IPAddress sourceIpAddress = null;

            if (IPAddress.TryParse(receivedDataArgs.SourceName, out sourceIpAddress))
            {
                sourceIpAddress = Tools.MapToIPv4(sourceIpAddress);
            }
            foreach (var client in _listeningClientsSet)
            {
                client.ReceiveDataCallback?.Invoke(new DataChunk(receivedDataArgs.Data, client.SessionId, false, client.ApiType), false);
            }
        }
Esempio n. 4
0
        private void ReceiveCallback(IAsyncResult asyncResult)
        {
            var state = asyncResult.AsyncState as BeginReceiveState;

            if (state == null)
            {
                return;
            }

            int bytesRecieved = 0;

            if (state.ListenSocket != null)
            {
                lock (_socketAccessLock)
                {
                    if (state.ListenSocket != null)
                    {
                        try
                        {
                            bytesRecieved = state.ListenSocket.EndReceiveFrom(asyncResult, ref state.RemotePeer);
                            var bufferSize = state.ListenSocket.BeginReceiveFrom(state.Data, 0, state.Data.Length,
                                                                                 SocketFlags.None,
                                                                                 ref state.RemotePeer,
                                                                                 ReceiveCallback,
                                                                                 state);
                        }
                        catch (ObjectDisposedException) // Socket has been closed.
                        {
                            if (_clientsTable.Contains(state.RemotePeer))
                            {
                                _clientsTable.Remove(state.RemotePeer);
                                var ipAddress = ((IPEndPoint)state.RemotePeer).Address;
                                CheckIfAddressIsMapped(ref ipAddress);
                                ConnectionClosed?.Invoke(ipAddress.ToString(), (ushort)((IPEndPoint)state.RemotePeer).Port);
                            }
                            return;
                        }
                        catch (SocketException ex) // An error occurred when attempting to access the socket.
                        {
                            ex.Message._DLOG();
                            CloseSocket();
                            return;
                        }
                        catch (InvalidCastException ex)
                        {
                            ex.Message._DLOG();
                        }
                    }
                }
            }

            if (bytesRecieved > 0)
            {
                var ipAddress = ((IPEndPoint)state.RemotePeer).Address;
                CheckIfAddressIsMapped(ref ipAddress);
                if (!_clientsTable.Contains(state.RemotePeer))
                {
                    _clientsTable.Add(state.RemotePeer);
                    ConnectionCreated?.Invoke(ipAddress.ToString(), (ushort)((IPEndPoint)state.RemotePeer).Port);
                }

                // Compose callback data.
                var receivedData = new ReceivedDataArgs {
                    SourceName = ipAddress.ToString(), ListenerPort = PortNumber
                };
                receivedData.Data = new byte[bytesRecieved];
                Array.Copy(state.Data, receivedData.Data, bytesRecieved);
                DataReceived?.Invoke(receivedData);
                if (!SuppressDebugOutput)
                {
                    "Listener accepted {0} << {1}"._DLOG(receivedData.SourceName, Tools.GetHex(receivedData.Data));
                }
            }
        }