Ejemplo n.º 1
0
        private void OnPacketReceived(object sender, IPBEPacket packet)
        {
            Debug.WriteLine($"Packet received (\"{packet.GetType().Name}\")");
            switch (packet)
            {
            case PBEMatchCancelledPacket _:
            {
                BattleView.AddMessage("Match cancelled!", messageBox: false);
                break;
            }

            case PBEPlayerJoinedPacket pjp:
            {
                int id = pjp.BattleId;
                if (pjp.IsMe)
                {
                    BattleId = id;
                    if (id < 2)
                    {
                        Team           = Battle.Teams[id];
                        ShowRawValues0 = id == 0;
                        ShowRawValues1 = id == 1;
                    }
                }
                else
                {
                    BattleView.AddMessage(string.Format("{0} joined the game.", pjp.TrainerName), messageBox: false);
                }
                if (id < 2)
                {
                    Battle.Teams[id].TrainerName = pjp.TrainerName;
                }
                Send(new PBEResponsePacket());
                break;
            }

            case PBEPartyRequestPacket _:
            {
                Send(new PBEPartyResponsePacket(_teamShell));
                break;
            }

            case PBEActionsRequestPacket _:
            case PBESwitchInRequestPacket _:
            case PBEWinnerPacket _:
            {
                Battle.Events.Add(packet);
                StartPacketThread();
                Send(new PBEResponsePacket());
                break;
            }

            default:
            {
                Battle.Events.Add(packet);
                Send(new PBEResponsePacket());
                break;
            }
            }
        }
Ejemplo n.º 2
0
 public void Send(IPBEPacket packet)
 {
     if (Client.IsConnected)
     {
         Debug.WriteLine($"Packet sent ({BattleId} {TrainerName} \"{packet.GetType().Name}\")");
         resetEvent.Reset();
         Client.Send(packet);
     }
 }
Ejemplo n.º 3
0
        private void OnPacketReceived(object sender, IPBEPacket packet)
        {
            // TODO: Kick players who are sending broken packets or sending too many
            Type type = packet.GetType();

            Debug.WriteLine($"Packet received ({BattleId} {TrainerName} \"{type.Name}\")");
            if (_packetType != null && type.Equals(_packetType))
            {
                _packetType = null;
                switch (packet)
                {
                case PBELegalPartyResponsePacket lprp:
                {
                    Console.WriteLine($"Received party ({BattleId} {TrainerName})");
                    if (!Server.Settings.Equals(lprp.Party.Settings))
                    {
                        Console.WriteLine("Party does not have matching settings!");
                        Console.WriteLine("\tServer: \"{0}\"", Server.Settings);
                        Console.WriteLine("\tParty: \"{0}\"", lprp.Party.Settings);
                    }
                    else
                    {
                        _party = lprp.Party;
                        resetEvent.Set();
                    }
                    break;
                }

                case PBEPartyResponsePacket prp:
                {
                    Console.WriteLine($"Received party ({BattleId} {TrainerName})");
                    _party = prp.Party;
                    resetEvent.Set();
                    break;
                }

                default: resetEvent.Set(); break;
                }
            }
            else if (_actionType != null && (type.Equals(_actionType) || type.Equals(typeof(PBEFleeResponsePacket))))
            {
                _actionType = null;
                switch (packet)
                {
                case PBEActionsResponsePacket arp: Server.ActionsSubmitted(this, arp.Actions); break;

                case PBEFleeResponsePacket _: Server.FleeSubmitted(this); break;

                case PBESwitchInResponsePacket sirp: Server.SwitchesSubmitted(this, sirp.Switches); break;

                default: throw new ArgumentOutOfRangeException(nameof(packet));
                }
            }
        }
Ejemplo n.º 4
0
        private void OnPacketReceived(object sender, IPBEPacket packet)
        {
            Debug.WriteLine($"Packet received ({BattleId} \"{packet.GetType().Name}\")");
            resetEvent.Set();
            if (BattleId < 2)
            {
                switch (packet)
                {
                case PBEActionsResponsePacket arp:
                {
                    Server.ActionsSubmitted(this, arp.Actions);
                    break;
                }

                case PBEPartyResponsePacket prp:
                {
                    Console.WriteLine($"Received team from {TrainerName}!");
                    if (!submittedTeam)
                    {
                        submittedTeam = true;
                        PBETeamShell s = prp.TeamShell;
                        Server.PartySubmitted(this, s);
                        s.Dispose();
                    }
                    else
                    {
                        Console.WriteLine("Team submitted multiple times!");
                    }
                    break;
                }

                case PBESwitchInResponsePacket sirp:
                {
                    Server.SwitchesSubmitted(this, sirp.Switches);
                    break;
                }
                }
            }
            // TODO: Kick players who are sending bogus packets or sending too many
        }
Ejemplo n.º 5
0
        private void OnPacketReceived(object sender, IPBEPacket packet)
        {
            Debug.WriteLine($"Connecting... received \"{packet.GetType().Name}\"");
            switch (packet)
            {
            case PBEMatchCancelledPacket _:
            {
                _action.Invoke(null);
                break;
            }

            case PBEPartyRequestPacket prp:
            {
                _battleId = prp.BattleId;
                if (prp.RequireLegal)
                {
                    Send(new PBELegalPartyResponsePacket(_party));
                }
                else
                {
                    Send(new PBEPartyResponsePacket(_party));
                }
                break;
            }

            case PBEBattlePacket bp:
            {
                _client.Disconnected   -= OnDisconnected;
                _client.Error          -= OnError;
                _client.PacketReceived -= OnPacketReceived;
                _action.Invoke(Tuple.Create(_client, bp, _battleId));
                // Response will be sent in NetworkClient constructor so the server doesn't send packets between threads
                break;
            }

            default: throw new ArgumentOutOfRangeException(nameof(packet));
            }
        }
Ejemplo n.º 6
0
        private void OnPacketReceived(object sender, IPBEPacket packet)
        {
            Debug.WriteLine($"{Name} received \"{packet.GetType().Name}\"");
            switch (packet)
            {
            case PBEMatchCancelledPacket _:
            {
                BattleView.AddMessage("Match cancelled!", messageBox: false);
                break;
            }

            case PBEPlayerJoinedPacket pjp:
            {
                BattleView.AddMessage(string.Format("{0} joined the game.", pjp.TrainerName), messageBox: false);
                Send(new PBEResponsePacket());
                break;
            }

            case PBEActionsRequestPacket _:
            case PBESwitchInRequestPacket _:
            case PBEWinnerPacket _:
            {
                Battle.Events.Add(packet);
                Send(new PBEResponsePacket());
                StartPacketThread();
                break;
            }

            default:
            {
                BattleView.AddMessage("Communicating...", messageLog: false);
                Battle.Events.Add(packet);
                Send(new PBEResponsePacket());
                break;
            }
            }
        }