public void Check() { while (Client.Available != 0) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0); var dgram = Client.Receive(ref endPoint); using (var stream = new MemoryStream(dgram)) { var reader = new BinaryWrapper(stream); while (stream.Length != stream.Position) { byte packetType = reader.ReadByte(); OnPacketReceived(packetType, reader, endPoint); } } } if (Stream.BaseStream.Length != 0) { var arr = _memory.ToArray(); Client.Send(arr, arr.Length); _memory.SetLength(0); } }
public void Check() { while (Listener.Available != 0) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0); var dgram = Listener.Receive(ref endPoint); using (var stream = new MemoryStream(dgram)) { var reader = new BinaryWrapper(stream); while (stream.Length != stream.Position) { byte packetType = reader.ReadByte(); Server.OnReceiveUDPData(packetType, reader, endPoint); } } } byte[] batchArray; if (BatchStream.BaseStream.Length != 0) { batchArray = _memory.ToArray(); } else { batchArray = new byte[0]; } foreach (var c in Server.Players) { if (c.Udp.Stream.BaseStream.Length != 0 || BatchStream.BaseStream.Length != 0) { var arr = ((MemoryStream)c.Udp.Stream.BaseStream).ToArray().Concat <byte>(batchArray).ToArray <byte>(); Listener.Send(arr, arr.Length, c.Udp.EndPoint); c.Udp.Stream.BaseStream.SetLength(0); } } _memory.SetLength(0); }
public void Check() { if (!CheckConnect()) { Disconnect(); return; } while (Tcp.NetStream.DataAvailable) { var reader = new BinaryWrapper(Tcp.NetStream); while (true) { byte packetType = reader.ReadByte(); if (packetType == PacketTypeBase.EndOfMessage) { break; } else if (packetType == ServerPacketTypeBase.ConnectionAck) { Active = true; int port = reader.ReadInt(); Udp.EndPoint = new IPEndPoint(((IPEndPoint)Tcp.Client.Client.RemoteEndPoint).Address, port); string playerName = StringWriter.Read(reader); Name = playerName; } else if (packetType == ServerPacketTypeBase.Disconnected) { Disconnect(); } Tcp.OnPacketReceived(packetType, reader, (IPEndPoint)Tcp.Client.Client.RemoteEndPoint); Server.OnReceiveTCPData(packetType, reader, this); } } if (Tcp.BatchStream.BaseStream.Length != 0) { Tcp.NetStreamBinary.Write(Tcp.Memory.ToArray(), 0, (int)Tcp.Memory.Length); Tcp.Memory.SetLength(0); } }
public void Check() { if (!Connected) { if (_client.ConnectionState == ConnectionState.Connecting && (DateTime.Now - ConnectionTime).Seconds > 4) { _client.ConnectionState = ConnectionState.Timeout; } return; } while (Client.Available != 0) { var reader = new BinaryWrapper(NetStream); while (true) { byte packetType = reader.ReadByte(); if (packetType == PacketTypeBase.EndOfMessage) { break; } else if (packetType == ClientPacketTypeBase.SpawnAck) { int count = reader.ReadInt(); _client.Players.SetPlayers(count); _client.PlayerIndex = reader.ReadInt(); _client.Players[_client.PlayerIndex].Name = _client.Name; _client.Spawned(); } else if (packetType == ClientPacketTypeBase.ConnectionAck) { _client.Connected(); } else if (packetType == ClientPacketTypeBase.PlayerData) { int index = reader.ReadByte(); byte bits = reader.ReadByte(); var player = _client.GetPlayer(index); if ((bits & ClientPacketTypeBase.PlayerDataBits.ActiveBit) != 0) { player.Active = reader.ReadBoolean(); } if ((bits & ClientPacketTypeBase.PlayerDataBits.NameBit) != 0) { player.Name = StringWriter.Read(reader); } if (player.Active == false) { _client.Players.Remove(player); } _client.OnPlayerDataReceived(player, reader); } OnPacketReceived(packetType, reader, (IPEndPoint)Client.Client.RemoteEndPoint); } } if (BatchStream.BaseStream.Length != 0) { NetStreamBinary.Write(_memory.ToArray(), 0, (int)_memory.Length); _memory.SetLength(0); } }