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; } } }
public void Send(IPBEPacket packet) { if (Client.IsConnected) { Debug.WriteLine($"Packet sent ({BattleId} {TrainerName} \"{packet.GetType().Name}\")"); resetEvent.Reset(); Client.Send(packet); } }
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)); } } }
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 }
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)); } }
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; } } }