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"); } }
private void RaiseDataReceived(ReceivedDataArgs args) { if (DataReceivedEvent != null) { DataReceivedEvent(udpClient, args); } }
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); } }
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)); } } }