void OnRecievedPlayerMicrophoneAudio(CNetworkPlayer _cPlayer, CNetworkStream _cAudioDataStream) { GameObject playerActor = CGamePlayers.GetPlayerActor(_cPlayer.PlayerId); CNetworkViewId playerViewID = playerActor.GetComponent <CNetworkView>().ViewId; _cAudioDataStream.SetReadOffset(0); byte[] streamData = _cAudioDataStream.ReadBytes(_cAudioDataStream.NumUnreadBytes); CNetworkStream dataStream = new CNetworkStream(); dataStream.Write(streamData); dataStream.Write(playerViewID); Dictionary <ulong, CNetworkPlayer> players = CNetwork.Server.FindNetworkPlayers(); foreach (ulong playerID in players.Keys) { if (m_bReturnToSender) { CNetwork.Server.TransmitMicrophoneAudio(playerID, dataStream); } else { if (_cPlayer.PlayerId != playerID) { CNetwork.Server.TransmitMicrophoneAudio(playerID, dataStream); } } } }
void DecodeAudio(object _rawData) { //Convert incoming data to a CNetworkStream. CNetworkStream _cAudioDataStream = (CNetworkStream)_rawData; //Pull relevant information out of the network stream. int iFrequency = _cAudioDataStream.ReadInt(); int iNumSamples = _cAudioDataStream.ReadInt(); int iNumEncodedBytes = _cAudioDataStream.ReadInt(); byte[] baEncodedData = _cAudioDataStream.ReadBytes(iNumEncodedBytes); CNetworkViewId cSenderViewID = _cAudioDataStream.ReadNetworkViewId(); // Decode short[] saDecodedFrames = new short[iNumSamples]; int iNumDecodedBytes = m_eDecoder.Decode(baEncodedData, 0, iNumEncodedBytes, saDecodedFrames, 0, false); //Debug.Log("Decoded audio data size: " + iNumDecodedBytes + " : " + saDecodedFrames.Length); //Populate a new struct which can be accessed later. DecodeInformation decodedFrameInfo; decodedFrameInfo.saDecodedData = saDecodedFrames; decodedFrameInfo.iFrequency = iFrequency; decodedFrameInfo.cSenderViewID = cSenderViewID; decodedFrameInfo.iNumSamples = iNumSamples; s_decodedFrames.Enqueue(decodedFrameInfo); }
protected void HandleUnconnectPong(byte[] _baData, RakNet.SystemAddress _cServerSystemAddress, RakNet.RakNetGUID _cServerGuid) { // Create stream CNetworkStream cStream = new CNetworkStream(_baData); // Ignore message identifier cStream.IgnoreBytes(1); // Read time uint uiTime = cStream.ReadUInt(); // Read response data byte[] baOfflinePingResponse = cStream.ReadBytes(cStream.NumUnreadBytes); // Create server info TServer tLanServerInfo = new TServer(); tLanServerInfo.sIp = _cServerSystemAddress.ToString(); tLanServerInfo.usPort = _cServerSystemAddress.GetPort(); tLanServerInfo.uiLatency = RakNet.RakNet.GetTimeMS() - uiTime; tLanServerInfo.cGuid = new RakNet.RakNetGUID(_cServerGuid.g); // Convert response data to server info tLanServerInfo.tServerInfo = new CNetworkServer.TServerInfo(baOfflinePingResponse); uint uiLocalNumberOfAddresses = m_cRnPeer.GetNumberOfAddresses(); string sIpPrefix = _cServerSystemAddress.ToString().Substring(0, _cServerSystemAddress.ToString().IndexOf('.')); bool bIsLanServer = false; for (uint i = 0; i < uiLocalNumberOfAddresses; ++ i) { string sMyLanIp = m_cRnPeer.GetLocalIP(i); string sLanIpPrefix = sMyLanIp.Substring(0, sMyLanIp.IndexOf('.')); if (sLanIpPrefix == sIpPrefix) { bIsLanServer = true; break; } } if (!bIsLanServer) { m_aOnlineServers.Add(tLanServerInfo); } else { m_aLanServers.Add(tLanServerInfo); } //Logger.WriteError("Added server ({0}:({1}) lan ({2})", tLanServerInfo.sIp, tLanServerInfo.usPort, bIsLanServer); // Notify event observers if (EventFoundServer != null) { EventFoundServer(tLanServerInfo); } }
void OnRecievedPlayerMicrophoneAudio(CNetworkPlayer _cPlayer, CNetworkStream _cAudioDataStream) { GameObject playerActor = CGamePlayers.GetPlayerActor(_cPlayer.PlayerId); CNetworkViewId playerViewID = playerActor.GetComponent<CNetworkView>().ViewId; _cAudioDataStream.SetReadOffset(0); byte[] streamData = _cAudioDataStream.ReadBytes(_cAudioDataStream.NumUnreadBytes); CNetworkStream dataStream = new CNetworkStream(); dataStream.Write(streamData); dataStream.Write(playerViewID); Dictionary<ulong,CNetworkPlayer> players = CNetwork.Server.FindNetworkPlayers(); foreach(ulong playerID in players.Keys) { if(m_bReturnToSender) { CNetwork.Server.TransmitMicrophoneAudio(playerID, dataStream); } else { if(_cPlayer.PlayerId != playerID) { CNetwork.Server.TransmitMicrophoneAudio(playerID, dataStream); } } } }
protected void HandleUnconnectPong(byte[] _baData, RakNet.SystemAddress _cServerSystemAddress, RakNet.RakNetGUID _cServerGuid) { // Create stream CNetworkStream cStream = new CNetworkStream(_baData); // Ignore message identifier cStream.IgnoreBytes(1); // Read time uint uiTime = cStream.ReadUInt(); // Read response data byte[] baOfflinePingResponse = cStream.ReadBytes(cStream.NumUnreadBytes); // Create server info TServer tLanServerInfo = new TServer(); tLanServerInfo.sIp = _cServerSystemAddress.ToString(); tLanServerInfo.usPort = _cServerSystemAddress.GetPort(); tLanServerInfo.uiLatency = RakNet.RakNet.GetTimeMS() - uiTime; tLanServerInfo.cGuid = new RakNet.RakNetGUID(_cServerGuid.g); // Convert response data to server info tLanServerInfo.tServerInfo = new CNetworkServer.TServerInfo(baOfflinePingResponse); uint uiLocalNumberOfAddresses = m_cRnPeer.GetNumberOfAddresses(); string sIpPrefix = _cServerSystemAddress.ToString().Substring(0, _cServerSystemAddress.ToString().IndexOf('.')); bool bIsLanServer = false; for (uint i = 0; i < uiLocalNumberOfAddresses; ++i) { string sMyLanIp = m_cRnPeer.GetLocalIP(i); string sLanIpPrefix = sMyLanIp.Substring(0, sMyLanIp.IndexOf('.')); if (sLanIpPrefix == sIpPrefix) { bIsLanServer = true; break; } } if (!bIsLanServer) { m_aOnlineServers.Add(tLanServerInfo); } else { m_aLanServers.Add(tLanServerInfo); } //Logger.WriteError("Added server ({0}:({1}) lan ({2})", tLanServerInfo.sIp, tLanServerInfo.usPort, bIsLanServer); // Notify event observers if (EventFoundServer != null) { EventFoundServer(tLanServerInfo); } }