public void AddObject(NetworkObject obj, Player player = null, bool deadPlayers = true) { if (responsePrepared) throw new InvalidOperationException("Can't add objects when the object has been sent"); if(player != null) { if (objects == null) objects = new Dictionary<Player, NetworkMultipleObject>(); if (!objects.ContainsKey(player)) objects.Add(player, obj is NetworkMultipleObject ? (obj as NetworkMultipleObject) : new NetworkMultipleObject(obj)); else objects[player].AddObject(obj); } else if (deadPlayers) { if (all == null) all = obj is NetworkMultipleObject ? (obj as NetworkMultipleObject) : new NetworkMultipleObject(obj); else all.AddObject(obj); } else { if (noDead == null) noDead = obj is NetworkMultipleObject ? (obj as NetworkMultipleObject) : new NetworkMultipleObject(obj); else all.AddObject(obj); } }
private void PrepareResponses() { if (noDead != null) //contains everything non dead people need noDead.AddObject(all); else noDead = all; if(objects != null) foreach(var player in objects.Keys) { if (noDead != null && !player.Dead) objects[player].AddObject(noDead); else if (all != null) objects[player].AddObject(all); } responsePrepared = true; }
public void TestMultipleObjectSender() { var player = Player.GetPlayer("Sander"); var player2 = Player.GetPlayer("Stefan"); player.Hand = new PlayerHand(new CardSecretRoleFascist(1), new CardMembershipFascist()); player2.Hand = new PlayerHand(new CardSecretRoleFascist(0), new CardMembershipFascist()); var msg = new NetworkMultipleObject( new NetworkRevealRoleObject(player), new NetworkRevealRoleObject(player2), new NetworkMessageObject("Sander", "Hallo ik ben een vis"), new NetworkNewPlayerObject(ServerCommands.PlayerConnected, player, 1), new NetworkPlayerObject(ServerCommands.AnnouncePresident, player) ); var decoder = ServerCommands.Multiple.GetDecoder(); var bytes = decoder.GenerateByteStream(msg); var decoded = decoder.GenerateObject(bytes, false); Assert.IsInstanceOfType(decoded, typeof(NetworkMultipleObject)); var receivedMsg = decoded as NetworkMultipleObject; Assert.IsTrue(receivedMsg.Objects.Length == msg.Objects.Length); for (var i = 0; i < receivedMsg.Objects.Length; i++) CompareDefaultObject(receivedMsg.Objects[i], msg.Objects[i]); CompareDefaultObject(msg, receivedMsg); }