Exemplo n.º 1
0
        private void EnterGame()
        {
            try
            {
                socket = new TcpClient();
                socket.Connect(ServerSettings.Items.GameServer);
                socket.GetStream().ReadTimeout = 5000;


                PacketParser parser = new PacketParser();
                while (!needDisconnect)
                {
                    try
                    {
                        byte[] payload = ReadPacket();

                        InPacket p = parser.Parse(payload);

                        //skip yourself pos packet
                        if (p is ReceiveDestination)
                        {
                            ReceiveDestination unit = p as ReceiveDestination;

                            if (!unit.Name.Equals(username, StringComparison.OrdinalIgnoreCase))
                            {
                                events.Push(p);
                            }
                        }
                        else if (p is UpdateMonster)
                        {
                            events.Push(p);
                        }
                        else if (p is UpdateHerb)
                        {
                            events.Push(p);
                        }
                        else if (p is LeaveMessage)
                        {
                            events.Push(p);
                        }
                        else if (p is ReceivePing)
                        {
                            Ping();
                        }
                    }
                    catch (IOException)//throwed, when after 5 seconds has no data
                    {
                        Ping();
                    }
                }

                socket.Close();
                needDisconnect = false;
            }
            catch (Exception ex)
            {
                Logger.StackTrace(ex);
            }
        }
Exemplo n.º 2
0
        public static string ReceiveDestination(ReceiveDestination packet, ReceiveDestinationForm to)
        {
            string[] args = packet.ToString().Split();
            switch (to)
            {
            case ReceiveDestinationForm.SPAWN:
                args[0] = "spawn";
                break;

            case ReceiveDestinationForm.MOVE:
                args[0] = "move";
                break;
            }
            return(string.Join(" ", args));
        }
Exemplo n.º 3
0
        public void Push(InPacket packet)
        {
            #region Playable unit events
            if (packet is ReceiveDestination)
            {
                ReceiveDestination pos = packet as ReceiveDestination;

                if (presentedUnits.Contains(pos.Name))
                {
                    events.Enqueue(PacketConverter.ReceiveDestination(pos, ReceiveDestinationForm.MOVE));
                }
                else
                {
                    presentedUnits.Add(pos.Name);
                    events.Enqueue(PacketConverter.ReceiveDestination(pos, ReceiveDestinationForm.SPAWN));
                }
            }
            else if (packet is LeaveMessage)
            {
                LeaveMessage lev = packet as LeaveMessage;

                presentedUnits.Remove(lev.Name);
                events.Enqueue(lev.ToString());
            }
            #endregion
            #region Fauna events
            else if (packet is UpdateMonster)
            {
                UpdateMonster monster = packet as UpdateMonster;

                if (presentedFauna.Contains(monster.Id))
                {
                    events.Enqueue(PacketConverter.UpdateMonster(monster, UpdateMonsterForm.MOVE));
                }
                else
                {
                    presentedFauna.Add(monster.Id);
                    events.Enqueue(PacketConverter.UpdateMonster(monster, UpdateMonsterForm.SPAWN));
                }
            }
            #endregion
            #region Flora events
            else if (packet is UpdateHerb)
            {
                UpdateHerb herb = packet as UpdateHerb;

                if (presentedFauna.Contains(herb.Id))
                {
                    if (herb.State == 0)
                    {
                        events.Enqueue(PacketConverter.UpdateHerb(herb, UpdateHerbForm.REMOVE));
                    }
                    else
                    {
                        events.Enqueue(PacketConverter.UpdateHerb(herb, UpdateHerbForm.GROWTH));
                    }
                }
                else
                {
                    presentedFlora.Add(herb.Id);
                    events.Enqueue(PacketConverter.UpdateHerb(herb, UpdateHerbForm.SPAWN));
                }
            }
            #endregion
        }