// ------------------------------------------- /* * Set a binary data from a client */ public void SetBinaryDataFromClientsToServer(int _idConnection, byte[] _binaryData) { PlayerConnectionData playerConnection = GetConnection((int)_idConnection); if (playerConnection != null) { playerConnection.SetBinaryData(_binaryData); } }
// ------------------------------------------- /* * A message from the clients has been received */ public void MessageFromClientsToServer(int _idConnection, string _messageData) { PlayerConnectionData playerConnection = GetConnection(_idConnection); if (playerConnection != null) { Debug.Log("PlayersConnectionController::MessageFromClients::MESSAGE FROM CLIENT[" + _idConnection + "]=" + _messageData); Dictionary <string, object> message = DeserializeJSON(_messageData); playerConnection.PushMessage(message); m_displayMessages.Add(message); UIEventController.Instance.DispatchUIEvent(UIEventController.EVENT_SCREENMAINCOMMANDCENTER_REGISTER_LOG, _messageData); } }
// ------------------------------------------- /* * New client has been connected */ public void ClientNewConnection(int _idConnection, GameObject _reference) { PlayerConnectionData newPlayerConnectionData = new PlayerConnectionData(_idConnection, _reference); if (!m_playersConnections.Contains(newPlayerConnectionData)) { m_playersConnections.Add(newPlayerConnectionData); m_currentProcessedClient = 0; string eventConnected = CreateJSONMessage(_idConnection, MESSAGE_TYPE_NEW_CONNECTION); m_displayMessages.Add(DeserializeJSON(eventConnected)); Debug.Log(eventConnected); UIEventController.Instance.DispatchUIEvent(UIEventController.EVENT_SCREENMAINCOMMANDCENTER_LIST_USERS, m_playersConnections); UIEventController.Instance.DispatchUIEvent(UIEventController.EVENT_SCREENMAINCOMMANDCENTER_REGISTER_LOG, eventConnected); } }
// ------------------------------------------- /* * New client has been connected */ public bool ClientNewConnection(int _idConnection) { PlayerConnectionData newPlayerConnection = new PlayerConnectionData(_idConnection, null); if (!m_playersConnections.Contains(newPlayerConnection)) { m_playersConnections.Add(newPlayerConnection); string eventConnected = CommunicationsController.CreateJSONMessage(_idConnection, CommunicationsController.MESSAGE_TYPE_NEW_CONNECTION); Debug.Log(eventConnected); UIEventController.Instance.DispatchUIEvent(UIEventController.EVENT_SCREENMAINCOMMANDCENTER_LIST_USERS, m_playersConnections); UIEventController.Instance.DispatchUIEvent(UIEventController.EVENT_SCREENMAINCOMMANDCENTER_REGISTER_LOG, eventConnected); return(true); } else { return(false); } }
// ------------------------------------------- /* * Process a single message */ private void ProcessMessage(Dictionary <string, object> _message) { long networkOriginId = (long)_message[DATAFIELD_UID]; string typeMessage = (string)_message[DATAFIELD_TYPE]; switch (typeMessage) { case MESSAGE_TYPE_INFORMATION: string dataInformationMessage = _message[DATAFIELD_DATA].ToString(); Debug.Log("MESSAGE_TYPE_INFORMATION::FROM[" + networkOriginId + "];DATA=" + dataInformationMessage); break; case MESSAGE_TYPE_REGISTER_PREFAB: if (!m_isServer) { Debug.Log("MESSAGE_TYPE_REGISTER_PREFAB::FROM[" + networkOriginId + "];DATA=" + _message[DATAFIELD_DATA].ToString()); string[] prefabData = _message[DATAFIELD_DATA].ToString().Split(new string[] { TOKEN_PARAMETER_SEPARATOR }, StringSplitOptions.None); NetworkEventController.Instance.DispatchLocalEvent(NetworkEventController.EVENT_COMMUNICATIONSCONTROLLER_REGISTER_PREFAB, prefabData[0], int.Parse(prefabData[1])); } break; case MESSAGE_TYPE_CREATE_OBJECT: if (m_isServer) { string[] objectData = _message[DATAFIELD_DATA].ToString().Split(new string[] { TOKEN_PARAMETER_SEPARATOR }, StringSplitOptions.None); string[] positionData = _message[DATAFIELD_POSITION].ToString().Split(new string[] { TOKEN_PARAMETER_SEPARATOR }, StringSplitOptions.None); Vector3 position = new Vector3(float.Parse(positionData[0]), float.Parse(positionData[1]), float.Parse(positionData[2])); NetworkEventController.Instance.DispatchLocalEvent(NetworkEventController.EVENT_COMMUNICATIONSCONTROLLER_REQUEST_TO_CREATE_NETWORK_OBJECT, objectData[0], objectData[1], objectData[2], position, objectData[3], bool.Parse(objectData[4]), bool.Parse(objectData[5])); } break; case MESSAGE_TYPE_IP_ADDRESS: if (m_isServer) { PlayerConnectionData client = GetConnection((int)networkOriginId); if (client != null) { /* * for (int i = 0; i < NetworkServer.connections.Count; i ++) * { * Debug.Log("NetworkServer.connections["+i+"]=" + NetworkServer.connections[i].address); * } */ #if !DISABLE_UNET_COMMS && !ENABLE_MIRROR string ip4 = NetworkServer.connections[NetworkServer.connections.Count - 1].address; client.NetworkAddress = ip4.Substring(ip4.LastIndexOf(':') + 1, ip4.Length - ip4.LastIndexOf(':') - 1); Debug.Log("NETWORK ADDRESS RECEIVED::client.NetworkAddress=" + client.NetworkAddress); #endif } } break; case MESSAGE_TYPE_EVENT: string nameEvent = _message[DATAFIELD_EVENT].ToString(); int idOriginConnection = int.Parse(_message[DATAFIELD_ORIGIN_ID].ToString()); int idTargetConnection = int.Parse(_message[DATAFIELD_TARGET_ID].ToString()); string[] dataEvent = _message[DATAFIELD_DATA].ToString().Split(new string[] { TOKEN_PARAMETER_SEPARATOR }, StringSplitOptions.None); // IF OTHER MACHINES, DISPATCH EVENT LOCALLY if ((m_networkID != idOriginConnection) && // NOT ORIGIN ((idTargetConnection == -1) || ((idTargetConnection != -1) && (m_networkID == idTargetConnection)))) // IS TARGET OR IT'S FOR ALL { NetworkEventController.Instance.DispatchCustomNetworkEvent(nameEvent, true, idOriginConnection, idTargetConnection, dataEvent); } // IF SERVER, BROADCAST RECEIVED MESSAGE ON ALL THE CLIENTS if (m_isServer) { string messageNetworkEvent = MessageEvent(m_networkID, nameEvent, idOriginConnection, idTargetConnection, dataEvent); if (messageNetworkEvent != null) { NetworkEventController.Instance.DispatchLocalEvent(NetworkEventController.EVENT_PLAYERCONNECTIONCONTROLLER_RPC_MESSAGE, idTargetConnection, idOriginConnection, messageNetworkEvent); } } break; } }