// ------------------------------------------- /* * UnPack a communication received and dispatch it to the system */ public void UnPackEventAndDispatch(string _package) { #if DEBUG_MODE_DISPLAY_LOG Debug.LogError("****UnPackEventAndDispatch::_package=" + _package); #endif // PROCESS ALL THE OTHER EVENTS string[] parameters = _package.Split(TOKEN_SEPARATOR_EVENTS); string nameEvent = parameters[0]; // PROCESS PACKAGE if (m_uniqueNetworkID != -1) { if (parameters.Length > 3) { int uniqueNetworkID = int.Parse(parameters[1]); if (uniqueNetworkID == m_uniqueNetworkID) { // Debug.LogError("ClientTCPEventsController::EVENT[" + nameEvent + "] IGNORED BECAUSE IT CAME FROM THIS ORIGIN"); return; } int originNetworkID = int.Parse(parameters[2]); int targetNetworkID = int.Parse(parameters[3]); string[] list = new string[parameters.Length - 4]; for (int i = 4; i < parameters.Length; i++) { list[i - 4] = parameters[i]; } NetworkEventController.Instance.DispatchCustomNetworkEvent(nameEvent, true, originNetworkID, targetNetworkID, list); } } else { // RETRIEVE THE UNIQUE NETWORK IDENTIFICATOR if (nameEvent == EVENT_CLIENT_TCP_ESTABLISH_NETWORK_ID) { m_room = int.Parse(parameters[4]); m_uidPlayer = parameters[5]; #if DEBUG_MODE_DISPLAY_LOG Debug.LogError("EVENT_CLIENT_TCP_ESTABLISH_NETWORK_ID::HAS BEEN ASSIGNED AVAILABLE ROOM[" + m_room + "]++++++++++"); #endif m_events.Add(Pack(EVENT_CLIENT_TCP_PLAYER_UID, -1, -1, (MultiplayerConfiguration.LoadIsRoomLobby() ? m_uidPlayer : FacebookController.Instance.Id))); if (GameObject.FindObjectOfType <YourNetworkTools>() == null) { UIEventController.Instance.DispatchUIEvent(EVENT_CLIENT_TCP_ESTABLISH_NETWORK_ID, m_room); } else { NetworkEventController.Instance.DelayLocalEvent(EVENT_CLIENT_TCP_ESTABLISH_NETWORK_ID, 1f, m_room); } } else { if (nameEvent == EVENT_CLIENT_TCP_LIST_OF_GAME_ROOMS) { string[] roomsInvited = parameters[4].Split(TOKEN_SEPARATOR_PARTY); m_roomsInvited.Clear(); m_roomsLobby.Clear(); for (int i = 0; i < roomsInvited.Length; i++) { string[] dataParty = roomsInvited[i].Split(TOKEN_SEPARATOR_PLAYERS_IDS); if (dataParty.Length > 1) { if (int.Parse(dataParty[0]) == 0) { m_roomsInvited.Add(new ItemMultiTextEntry(dataParty)); } else { m_roomsLobby.Add(new ItemMultiTextEntry(dataParty)); } } } UIEventController.Instance.DispatchUIEvent(EVENT_CLIENT_TCP_LIST_OF_GAME_ROOMS); } else { if (nameEvent == EVENT_CLIENT_TCP_CONNECTED_ROOM) { m_uniqueNetworkID = int.Parse(parameters[4]); m_idNetworkServer = int.Parse(parameters[5]); int totalNumberPlayers = int.Parse(parameters[6]); NetworkEventController.Instance.DispatchLocalEvent(NetworkEventController.EVENT_SYSTEM_INITIALITZATION_LOCAL_COMPLETED, m_uniqueNetworkID); BasicSystemEventController.Instance.DispatchBasicSystemEvent(CommunicationsController.EVENT_COMMSCONTROLLER_SET_UP_IS_SERVER); UIEventController.Instance.DispatchUIEvent(EVENT_CLIENT_TCP_CONNECTED_ROOM, totalNumberPlayers); #if DEBUG_MODE_DISPLAY_LOG Debug.LogError("EVENT_CLIENT_TCP_CONNECTED_ROOM::ASSIGNED LOCAL CLIENT NUMBER[" + m_uniqueNetworkID + "] IN THE ROOM[" + m_room + "] WHERE THE SERVER IS[" + m_idNetworkServer + "]++++++++++"); #endif } } } } }
// ------------------------------------------- /* * Manager of global events */ private void OnNetworkEvent(string _nameEvent, bool _isLocalEvent, int _networkOriginID, int _networkTargetID, params object[] _list) { if (_nameEvent == EVENT_YOURNETWORKTOOLS_INITIALITZATION_DATA) { string targetNetworkID = (string)_list[0]; string initialDataNetwork = (string)_list[1]; ActorNetwork[] networkActors = GameObject.FindObjectsOfType <ActorNetwork>(); // Debug.LogError("+++++++++++++EVENT_YOURNETWORKTOOLS_INITIALITZATION_DATA::TARGET[" + targetNetworkID + "]::data[" + initialDataNetwork + "]::TOTAL NETWORK ACTORS["+ networkActors.Length + "]"); for (int i = 0; i < networkActors.Length; i++) { IGameNetworkActor networkActor = networkActors[i].GetComponentInParent <IGameNetworkActor>(); if (networkActor != null) { if (networkActor.NetworkID.CheckID(targetNetworkID)) { networkActor.Initialize(initialDataNetwork); } } } } if (_nameEvent == ClientTCPEventsController.EVENT_CLIENT_TCP_ESTABLISH_NETWORK_ID) { #if ENABLE_BALANCE_LOADER int totalPlayersConfigurated = MultiplayerConfiguration.LoadNumberOfPlayers(); if (totalPlayersConfigurated != MultiplayerConfiguration.VALUE_FOR_JOINING) { string friends = MultiplayerConfiguration.LoadFriendsGame(); if (friends.Length > 0) { string[] friendIDs = friends.Split(','); int idRoomLobby = MultiplayerConfiguration.LoadRoomNumberInServer(-1); ClientTCPEventsController.Instance.CreateRoomForFriends(idRoomLobby, friendIDs, ""); } else { string nameRoomLobby = MultiplayerConfiguration.LoadNameRoomLobby(); if (nameRoomLobby.Length > 0) { int idRoomLobby = MultiplayerConfiguration.LoadRoomNumberInServer(-1); ClientTCPEventsController.Instance.CreateRoomForLobby(idRoomLobby, nameRoomLobby, totalPlayersConfigurated, ""); } else { throw new Exception("THERE IS NO NAME OF LOBBY TO CREATE A TCP CONNECTION"); } } } else { int idRoomLobby = MultiplayerConfiguration.LoadRoomNumberInServer(-1); if (idRoomLobby != -1) { if (MultiplayerConfiguration.LoadIsRoomLobby()) { ClientTCPEventsController.Instance.JoinRoomOfLobby(idRoomLobby, "null", ""); } else { ClientTCPEventsController.Instance.JoinRoomForFriends(idRoomLobby, "null", ""); } } else { throw new Exception("NO GOOD"); } } #endif } if (_nameEvent == ClientTCPEventsController.EVENT_CLIENT_TCP_CONNECTED_ROOM) { // Debug.LogError("EVENT_CLIENT_TCP_CONNECTED_ROOM::UniversalUniqueID[" + GetUniversalNetworkID() + "]"); } if (_nameEvent == NetworkEventController.EVENT_SYSTEM_INITIALITZATION_REMOTE_COMPLETED) { if (IsServer) { // Debug.LogError("++++++++++++++++++++SENDING INFORMATION ABOUT ALL EXISTING NETWORK OBJECTS+++++++++++++++++++++++++++++"); CheckInitializationObjects(); } } if (_nameEvent == NetworkEventController.EVENT_WORLDOBJECTCONTROLLER_LOCAL_CREATION_CONFIRMATION) { if (IsServer) { string keyNetworkGO = (string)_list[0]; CheckInitializationObjects(keyNetworkGO); } } if (_nameEvent == NetworkEventController.EVENT_WORLDOBJECTCONTROLLER_INITIAL_DATA) { if (IsServer) { if (!m_initialData.ContainsKey((string)_list[0])) { string keyNetworkGO = (string)_list[0]; string dataNetworkGO = (string)_list[1]; m_initialData.Add(keyNetworkGO, dataNetworkGO); // Debug.LogError("*************************************DATA ADDED TO LIST(" + keyNetworkGO + ")("+ dataNetworkGO + ")::TOTAL INITIAL DATA["+ m_initialData.Count + "]::TOTAL TCP PLAYERS["+m_tcpNetworkObjects.Count+"]"); CheckInitializationObjects(keyNetworkGO); } } } if (_nameEvent == EVENT_YOURNETWORKTOOLS_NETID_NEW) { if (IsServer) { // Debug.LogError("*************************************NEW TCP NETWORK OBJECT REGISTERED(" + m_tcpNetworkObjects.Count + "]"); CheckInitializationObjects(); } } if (_nameEvent == NetworkEventController.EVENT_WORLDOBJECTCONTROLLER_DESTROY_REQUEST) { DestroyNetworkObject(int.Parse((string)_list[0]), int.Parse((string)_list[1])); } if (_nameEvent == NetworkEventController.EVENT_COMMUNICATIONSCONTROLLER_CREATION_CONFIRMATION_NETWORK_OBJECT) { #if !DISABLE_UNET_COMMS m_unetNetworkObjects.Add(new NetworkWorldObject((GameObject)_list[0])); #endif } if (_nameEvent == NetworkEventController.EVENT_PLAYERCONNECTIONDATA_USER_DISCONNECTED) { Debug.Log("----------------------DISCONNECTED PLAYER[" + (int)_list[0] + "]"); } #if ENABLE_PHOTON if (_nameEvent == EVENT_YOURNETWORKTOOLS_CREATED_GAMEOBJECT) { GameObject newGO = (GameObject)_list[0]; if (!m_tcpNetworkObjects.Contains(newGO)) { m_tcpNetworkObjects.Add(newGO); NetworkEventController.Instance.DispatchLocalEvent(EVENT_YOURNETWORKTOOLS_NETID_NEW); } } #endif if (_nameEvent == ClientTCPEventsController.EVENT_CLIENT_TCP_TRANSFORM_DATA) { int NetID = (int)_list[0]; int UID = (int)_list[1]; int prefabIndex = (int)_list[2]; Vector3 position = (Vector3)_list[3]; Vector3 forward = (Vector3)_list[4]; Vector3 scale = (Vector3)_list[5]; object networkObject = GetNetworkObjectByID(NetID, UID); GameObject networkGameObject = null; if (networkObject == null) { m_networkIDReceived = NetID; networkGameObject = Utilities.AddChild(this.gameObject.transform, GetPrefabByName(GameObjects[prefabIndex].name)); networkGameObject.GetComponent <NetworkID>().IndexPrefab = GetPrefabIndexOfName(GameObjects[prefabIndex].name); networkGameObject.GetComponent <NetworkID>().NetID = NetID; networkGameObject.GetComponent <NetworkID>().UID = UID; m_tcpNetworkObjects.Add(networkGameObject); networkGameObject.transform.position = position; networkGameObject.transform.forward = forward; networkGameObject.transform.localScale = scale; NetworkEventController.Instance.DispatchLocalEvent(EVENT_YOURNETWORKTOOLS_NETID_NEW); } else { networkGameObject = (GameObject)networkObject; InterpolatorController.Instance.Interpolate(networkGameObject, position, TimeToUpdateTransforms * 1.01f); InterpolatorController.Instance.InterpolateForward(networkGameObject, forward, TimeToUpdateTransforms * 1.01f); networkGameObject.transform.localScale = scale; } } if (_nameEvent == EVENT_YOURNETWORKTOOLS_DESTROYED_GAMEOBJECT) { int NetID = (int)_list[1]; int UID = (int)_list[2]; if (IsLocalGame) { #if !DISABLE_UNET_COMMS for (int i = 0; i < m_unetNetworkObjects.Count; i++) { bool removeObject = false; if (m_unetNetworkObjects[i] == null) { removeObject = true; } else { if (m_unetNetworkObjects[i].GetNetworkObjectData() == null) { removeObject = true; } } if (removeObject) { m_unetNetworkObjects.RemoveAt(i); } else { if ((m_unetNetworkObjects[i].GetNetworkObjectData().NetID == NetID) && (m_unetNetworkObjects[i].GetNetworkObjectData().UID == UID)) { m_unetNetworkObjects[i].Destroy(); m_unetNetworkObjects.RemoveAt(i); return; } } } #endif } else { for (int i = 0; i < m_tcpNetworkObjects.Count; i++) { bool removeObject = false; if (m_tcpNetworkObjects[i] == null) { removeObject = true; } if (removeObject) { m_tcpNetworkObjects.RemoveAt(i); } else { if ((m_tcpNetworkObjects[i].GetComponent <NetworkID>().NetID == NetID) && (m_tcpNetworkObjects[i].GetComponent <NetworkID>().UID == UID)) { m_tcpNetworkObjects.RemoveAt(i); return; } } } } } }