Esempio n. 1
0
            public void Close()
            {
                NetStreamBinary.Close();
                Client.Close();
                Client = null;
                BatchStream.Close();

                _client.ConnectionState = ConnectionState.Disconnected;
            }
Esempio n. 2
0
            public void Close()
            {
                BatchStream.BaseStream.SetLength(0);

                NetStreamBinary.Close();
                Client.Close();
                Client          = null;
                NetStreamBinary = null;
                NetStream       = null;
            }
Esempio n. 3
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);
                }
            }