void AddPlayerToServer(Net_PlayerInfo pi) { if (pi.playerType == "host") { CreateHub(pi); } Net_HubInfo hub = GetPlayerHub(pi); if (hub != null) { hub.players.Add(pi); for (int i = 0; i < hub.players.Count; i++) { Net_PlayerInfo currentPlayer = hub.players[i]; if (currentPlayer != pi) { SendClient(pi.connectionId, currentPlayer); Debug.Log("sending players to joined client"); } } SendActivePlayers(pi, hub.players, reliableChannel); } else { for (int i = 0; i < hubs.Count; i++) { SendClient(pi.connectionId, hubs[i]); Debug.Log("sending " + pi.userName + " the hub"); } } }
void SendMovement(Net_Movement msg) { Net_HubInfo hub = GetPlayerHub(msg.player); List <Net_PlayerInfo> temp = new List <Net_PlayerInfo>(hub.players); Net_PlayerInfo sender = temp.Find(x => x.connectionId == msg.player.connectionId); temp.Remove(sender); SendActivePlayers(msg, temp, unreliableChannel); }
void CreateHub(Net_PlayerInfo host) { Debug.Log("Creating Hub"); Net_HubInfo hub = (new Net_HubInfo(string.Format("{0}'s game", host.userName), host) { players = new List <Net_PlayerInfo>(), }); hubs.Add(hub); }
Net_HubInfo GetPlayerHub(Net_PlayerInfo player) { Net_HubInfo hub = hubs.Find(x => x.hubName == player.joinedHub); if (hub != null) { return(hub); } else { return(null); } }
void ReadyUp(Net_ReadyUp msg) { Net_PlayerInfo player = GetCurrentPlayer(msg.connectionId); Net_HubInfo hub = GetPlayerHub(player); player.ready = msg.ready; Debug.Log(player.userName + " " + player.ready); Debug.Log("Players are: " + hub.players.TrueForAll(IsEveryPlayerReady)); if (hub.players.TrueForAll(IsEveryPlayerReady)) { SendActivePlayers(new Net_ReadyUp(0, true), hub.players, reliableChannel); } }
void AddHub(Net_HubInfo hub) { if (!hubs.Contains(hub)) { hubs.Add(hub); if (HubSelectScene.Instance != null) { HubSelectScene.Instance.ShowHubs(); } } else { hubs.Remove(hub); } }
private void UpdateMessagePump() { if (!isStarted) { return; } int recHostId; //Id for the platform where the message comes from int connectionId; //Which user is sending the message? int channelId; //Which lane is he sending that message from byte[] recBuffer = new byte[BYTE_SIZE]; //Holds the message that comes through int dataSize; //Size of the message NetworkEventType type = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, BYTE_SIZE, out dataSize, out error); switch (type) { case NetworkEventType.Nothing: break; case NetworkEventType.ConnectEvent: Debug.Log(string.Format("User {0} has connected through host {1}", connectionId, recHostId)); playerCount.Add(connectionId); break; case NetworkEventType.DisconnectEvent: Debug.Log(string.Format("User {0} has disconnected ;-;", connectionId)); if (playerCount.Count > 0) { playerCount.Remove(connectionId); } Net_PlayerInfo player = GetCurrentPlayer(connectionId); if (player != null) { Net_HubInfo hub = GetPlayerHub(player); if (hub != null) { Net_PlayerDisconnected discPlayer = new Net_PlayerDisconnected(player); hub.players.Remove(player); SendActivePlayers(discPlayer, hub.players, reliableChannel); if (player.playerType == "host") { Debug.Log("remove hubs!~!!"); SendClients(hub); hubs.Remove(hub); } } } break; case NetworkEventType.DataEvent: BinaryFormatter formatter = new BinaryFormatter(); MemoryStream ms = new MemoryStream(recBuffer); NetMsg msg = (NetMsg)formatter.Deserialize(ms); OnData(connectionId, channelId, recHostId, msg); break; default: case NetworkEventType.BroadcastEvent: Debug.Log("Unexpected network event type"); break; } }