public void Disconnect()
        {
            byte[] data;
            int    pos;

            if (IsMain)
            {
                IPAddress ip = null;
                foreach (IPEndPoint ipep in _connections)
                {
                    if (ipep != null && (ipep.Address != CIp && ipep.Port != CPort))
                    {
                        ip = ipep.Address;
                    }
                }
                if (ip != null)
                {
                    data = new byte[sizeof(int) + sizeof(long) + sizeof(int)];
                    pos  = 0;
                    BinaryHelper.Write((int)UDPCommands.ServerChanged, ref pos, ref data);
                    BinaryHelper.Write(ip.Address, ref pos, ref data);
                    BinaryHelper.Write(GameLevel.BonusId, ref pos, ref data);
                    _broadcast(data);
                }
            }
            data = new byte[sizeof(int) * 2];
            pos  = 0;
            //BinaryHelper.Write((int)UDPCommands.ClientDisconnected, ref pos, ref data);
            // BinaryHelper.Write(CurrentPlayer.Id, ref pos, ref data);
            _broadcast(data);
            _thread.Abort();
            _client.Close();
        }
Пример #2
0
        private void _sendConnections(IPEndPoint ipep)
        {
            int length = sizeof(int) + (sizeof(long) + sizeof(int)) * (_connections.Count + 1);

            byte[] data = new byte[length];
            int    pos  = 0;

            BinaryHelper.Write(_connections.Count, ref pos, ref data);
            foreach (IPEndPoint c in _connections)
            {
                if (c != null)
                {
                    BinaryHelper.Write(c.Address.Address, ref pos, ref data);
                    BinaryHelper.Write(c.Port, ref pos, ref data);
                }
                else
                {
                    BinaryHelper.Write((long)-1, ref pos, ref data);
                    BinaryHelper.Write(-1, ref pos, ref data);
                }
            }

            BinaryHelper.Write(ipep.Address.Address, ref pos, ref data);
            BinaryHelper.Write(ipep.Port, ref pos, ref data);

            _client.Send(data, length, ipep);
        }
Пример #3
0
 public override void WriteTo(Stream writer)
 {
     BinaryHelper.Write(writer, ((ushort)(6 + Target.GetByteCount())));
     BinaryHelper.Write(writer, Priority);
     BinaryHelper.Write(writer, Weight);
     BinaryHelper.Write(writer, Port);
     Target.WriteTo(writer);
 }
Пример #4
0
 public void WriteTo(Stream stream)
 {
     DomainName.WriteTo(stream);
     BinaryHelper.Write(stream, (ushort)Type);
     BinaryHelper.Write(stream, (ushort)Class);
     BinaryHelper.Write(stream, Ttl);
     if (ResponseData != null)
     {
         ResponseData.WriteTo(stream);
     }
 }
Пример #5
0
        public override void WriteTo(Stream writer)
        {
            ushort length = Length;

            BinaryHelper.Write(writer, length);

            if (length > 0)
            {
                BinaryHelper.Write(writer, Bytes);
            }
        }
Пример #6
0
 public void WriteTo(Stream stream)
 {
     foreach (string label in this)
     {
         if (label.Length == 0)
         {
             break;
         }
         byte[] bytes = Encoding.UTF8.GetBytes(label);
         //labels.Add(new KeyValuePair<byte[], byte>(bytes, (byte)bytes.Length));
         //totalLength += (ushort)(bytes.Length + 1);
         stream.WriteByte((byte)bytes.Length);
         BinaryHelper.Write(stream, bytes);
     }
     stream.WriteByte(0);
 }
Пример #7
0
        public override void WriteTo(Stream stream)
        {
            //ID
            BinaryHelper.Write(stream, ID);
            //Qr, Opcode, Aa, Tc, Rd
            byte b = 0;

            b += (byte)QueryResponse;
            b  = (byte)(b << 4);
            b += (byte)OpCode;
            b  = (byte)(b << 1);
            b += (AuthoritativeAnswer) ? (byte)1 : (byte)0;
            b  = (byte)(b << 1);
            b += (Truncated) ? (byte)1 : (byte)0;
            b  = (byte)(b << 1);
            b += (RecursionDesired) ? (byte)1 : (byte)0;
            stream.WriteByte(b);

            //Ra, Z, Rcode
            b  = 0;
            b += (RecursionAvailable) ? (byte)1 : (byte)0;
            b  = (byte)(b << 7);
            b += (byte)ResponseCode;
            stream.WriteByte(b);
            BinaryHelper.Write(stream, QuestionEntries);
            BinaryHelper.Write(stream, AnswerEntries);
            BinaryHelper.Write(stream, AuthorityEntries);
            BinaryHelper.Write(stream, AdditionalEntries);
            foreach (Question q in Questions)
            {
                q.WriteTo(stream);
            }
            foreach (Answer a in Answers)
            {
                a.WriteTo(stream);
            }
            foreach (Answer a in Authorities)
            {
                a.WriteTo(stream);
            }
            foreach (Answer a in Additionals)
            {
                a.WriteTo(stream);
            }
        }
Пример #8
0
        private void _sendBonuses(IPEndPoint ipep)
        {
            var bonuses = Bonuses;
            int length  = bonuses.Count * (sizeof(int) + sizeof(int) + sizeof(int) + sizeof(byte)) + sizeof(int);

            byte[] data = new byte[length];
            int    pos  = 0;

            BinaryHelper.Write(bonuses.Count, ref pos, ref data);
            foreach (KeyValuePair <int, Bonus> B in bonuses)
            {
                BinaryHelper.Write(B.Value.Id, ref pos, ref data);
                BinaryHelper.Write(B.Value.iX, ref pos, ref data);
                BinaryHelper.Write(B.Value.iY, ref pos, ref data);
                BinaryHelper.Write((byte)B.Value.Type, ref pos, ref data);
            }
            _client.Send(data, data.Length, ipep);
        }
        public void Update(Player p)
        {
            int pos    = 0;
            int length = BASIC_DATA_LENGTH;

            if (lastAddedBonus != null)
            {
                length += BONUS_DATA_LENGTH;
            }
            byte[] data = new byte[length];

            BinaryHelper.Write(p.Id, ref pos, ref data);
            BinaryHelper.Write(p.X, ref pos, ref data);
            BinaryHelper.Write(p.Y, ref pos, ref data);
            BinaryHelper.Write(p.Direction, ref pos, ref data);
            BinaryHelper.Write(p.Shooting, ref pos, ref data);
            BinaryHelper.Write((int)p.Team, ref pos, ref data);
            BinaryHelper.Write((byte)p.CurrentInvItemAKey, ref pos, ref data);

            if (p.LastUsedInvItem != null)
            {
                BinaryHelper.Write((int)p.LastUsedInvItem.Type, ref pos, ref data);
            }
            else
            {
                BinaryHelper.Write(0, ref pos, ref data);
            }
            BinaryHelper.Write(lastRemovedBonus, ref pos, ref data);
            lastRemovedBonus = -1;
            BinaryHelper.Write(p.Deaths, ref pos, ref data);
            BinaryHelper.Write(p.Kills, ref pos, ref data);
            if (lastAddedBonus != null)
            {
                BinaryHelper.Write(lastAddedBonus.Id, ref pos, ref data);
                BinaryHelper.Write(lastAddedBonus.X, ref pos, ref data);
                BinaryHelper.Write(lastAddedBonus.Y, ref pos, ref data);
                BinaryHelper.Write((byte)lastAddedBonus.Type, ref pos, ref data);
                lastAddedBonus = null;
            }

            _broadcast(data);
        }
Пример #10
0
        public override void WriteTo(Stream writer)
        {
            ushort length = 0;
            List <KeyValuePair <byte[], byte> > bytes = new List <KeyValuePair <byte[], byte> >();

            foreach (KeyValuePair <string, string> kvp in Properties)
            {
                byte[] kvpBytes = Encoding.UTF8.GetBytes(kvp.Key + "=" + kvp.Value);
                bytes.Add(new KeyValuePair <byte[], byte>(kvpBytes, (byte)kvpBytes.Length));
                //writer.Write((byte)kvpBytes.Length);
                //writer.Write(kvpBytes);
                length += (ushort)kvpBytes.Length;
                length++;
            }
            BinaryHelper.Write(writer, length);
            foreach (var properties in bytes)
            {
                writer.WriteByte(properties.Value);
                BinaryHelper.Write(writer, properties.Key);
            }
        }
Пример #11
0
        public AddPlayerResult AddPlayer(List <Player> Players)
        {
            this.Players = Players;

            _client.Send(BitConverter.GetBytes((int)UDPCommands.ConnectToGame), sizeof(int), ServerIpEp);
            _getConnections();

            for (int i = 0; i < _connections.Count; i++)
            {
                if (_connections[i] != null)
                {
                    currentTeamCaret += 1;
                    Player player = new Player(i, 0, 0);
                    if (gameMode == Modes.Deathmatch)
                    {
                        player.SetTeam((Teams)currentTeamCaret);
                    }
                    Players.Add(player);
                    _requestTime.Add(DateTime.Now);
                }
                else
                {
                    Players.Add(null);
                    _requestTime.Add(new DateTime());
                }
            }

            AddPlayerResult result = new AddPlayerResult();

            IPEndPoint ipep = null;

            int pos = 0;

            byte[] data = _client.Receive(ref ipep);
            result.Mode = BinaryHelper.ReadInt32(data, ref pos);
            gameMode    = (Modes)result.Mode;

            // Receiving
            var currentGameState = _receiveGameState(_client);

            result.LevelWidth  = (int)currentGameState[0];
            result.LevelHeight = (int)currentGameState[1];
            result.Tiles       = (List <GEntity>)currentGameState[2];
            result.Entities    = (List <GEntity>)currentGameState[3];
            result.Spawners    = (List <GEntity>)currentGameState[4];

            data           = _client.Receive(ref ipep);   // Bonuses data
            result.Bonuses = _getBonuses(data);

            pos  = 0;
            data = _client.Receive(ref ipep);
            Spawner spawner = (Spawner)result.Spawners[Program.Rand.Next(0, result.Spawners.Count - 1)];

            CurrentPlayer = new Player(BinaryHelper.ReadInt32(data, ref pos), spawner.X, spawner.Y);
            result.Player = CurrentPlayer;
            if (gameMode == Modes.Deathmatch)
            {
                result.Player.SetTeam((Teams)currentTeamCaret);
            }
            Players[CurrentPlayer.Id]      = CurrentPlayer;
            _requestTime[CurrentPlayer.Id] = DateTime.Now;

            _thread = new Thread(_waitForClientData);
            _thread.Start();
            System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
            timer.Interval = 100;
            timer.Start();
            CurrentPlayer.Removed = true;
            IsConnected           = false;
            timer.Tick           += _timer_Tick;

            data = new byte[sizeof(int) * 2];
            pos  = 0;
            BinaryHelper.Write((int)UDPCommands.AddPlayer, ref pos, ref data);
            BinaryHelper.Write(CurrentPlayer.Id, ref pos, ref data);
            _broadcast(data);

            return(result);
        }
Пример #12
0
 public override void WriteTo(Stream writer)
 {
     BinaryHelper.Write(writer, DomainName.GetByteCount());
     DomainName.WriteTo(writer);
 }
Пример #13
0
 public override void WriteTo(Stream writer)
 {
     byte[] address = Address.GetAddressBytes();
     BinaryHelper.Write(writer, (ushort)address.Length);
     BinaryHelper.Write(writer, address);
 }
Пример #14
0
 public override void WriteTo(Stream writer)
 {
     BinaryHelper.Write(writer, ((ushort)Encoding.UTF8.GetByteCount(CNAME)));
     BinaryHelper.Write(writer, Encoding.UTF8.GetBytes(CNAME));
 }
Пример #15
0
 public void WriteTo(Stream stream)
 {
     DomainName.WriteTo(stream);
     BinaryHelper.Write(stream, (ushort)Type);
     BinaryHelper.Write(stream, (ushort)Class);
 }