internal void DoSendDiscoveryRequest( IPEndPoint endPoint, bool useBroadcast, NetDiscoveryRequest request, float interval, float timeout) { if (!m_netBase.m_isBound) m_netBase.Start(); if (request == null) { m_netBase.LogVerbose("Creating discovery request " + m_nextRequestNumber); request = new NetDiscoveryRequest(endPoint, m_nextRequestNumber++, useBroadcast, interval, timeout); if (m_requests == null) m_requests = new List<NetDiscoveryRequest>(); m_requests.Add(request); } string appIdent = m_netBase.m_config.ApplicationIdentifier; NetBuffer data = new NetBuffer(appIdent.Length + 8); // write app identifier data.Write(appIdent); // write netbase identifier to avoid self-discovery data.Write(m_netBase.m_randomIdentifier); // write request number data.Write((ushort)request.Number); m_netBase.LogWrite("Discovering " + endPoint.ToString() + "..."); m_netBase.QueueSingleUnreliableSystemMessage(NetSystemType.Discovery, data, endPoint, useBroadcast); }
/// <summary> /// Returns a NetMessage to return to application; or null if nothing /// </summary> internal IncomingNetMessage HandleResponse( IncomingNetMessage message, NetworkEndPoint endPoint ) { if ((m_netBase.m_enabledMessageTypes & NetMessageType.ServerDiscovered) != NetMessageType.ServerDiscovered) { return(null); // disabled } if (message.m_data == null || m_requests == null) { return(null); } ushort number = message.m_data.ReadUInt16(); // find corresponding request NetDiscoveryRequest found = null; foreach (NetDiscoveryRequest request in m_requests) { if (request.Number == number) { found = request; break; } } if (found == null) { m_netBase.LogVerbose("Received discovery response to request " + number + " - unknown/old request!"); return(null); // Timed out request or not found } if (found.HasDiscovered(endPoint)) { m_netBase.LogVerbose("Received discovery response to request " + number + " - previously known response!"); return(null); // Already discovered in this request, else stored it } m_netBase.LogVerbose("Received discovery response to request " + number + " - passing on to app..."); IncomingNetMessage resMsg = m_netBase.CreateIncomingMessage(); resMsg.m_msgType = NetMessageType.ServerDiscovered; // write sender, assume ipv4 resMsg.m_data.Write(endPoint); return(resMsg); }
internal void DoSendDiscoveryRequest( NetworkEndPoint endPoint, bool useBroadcast, NetDiscoveryRequest request, float interval, float timeout) { if (!m_netBase.m_isBound) { m_netBase.Start(); } m_netBase.LogWrite("Discovery request to " + endPoint); if (request == null) { m_netBase.LogVerbose("Creating discovery request " + m_nextRequestNumber); request = new NetDiscoveryRequest(endPoint, m_nextRequestNumber++, useBroadcast, interval, timeout); if (m_requests == null) { m_requests = new List <NetDiscoveryRequest>(); } m_requests.Add(request); } string appIdent = m_netBase.m_config.ApplicationIdentifier; NetBuffer data = new NetBuffer(appIdent.Length + 8); // write app identifier data.Write(appIdent); // write netbase identifier to avoid self-discovery data.Write(m_netBase.m_localRndSignature); // write request number data.Write((ushort)request.Number); m_netBase.LogWrite("Discovering " + endPoint.ToString() + "..."); m_netBase.QueueSingleUnreliableSystemMessage(NetSystemType.Discovery, data, endPoint, useBroadcast); }