/// <summary> /// Sends discovery request from client /// </summary> public void BroadcastDiscoveryRequest() { if (clientUdpClient == null) { return; } if (NetworkClient.isConnected) { StopDiscovery(); return; } IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, serverBroadcastListenPort); using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { writer.WriteLong(secretHandshake); try { Request request = GetRequest(); writer.Write(request); ArraySegment <byte> data = writer.ToArraySegment(); clientUdpClient.SendAsync(data.Array, data.Count, endPoint); } catch (Exception) { // It is ok if we can't broadcast to one of the addresses } } }
/// <summary> /// Reply to the client to inform it of this server /// </summary> /// <remarks> /// Override if you wish to ignore server requests based on /// custom criteria such as language, full server game mode or difficulty /// </remarks> /// <param name="request">Request coming from client</param> /// <param name="endpoint">Address of the client that sent the request</param> protected virtual void ProcessClientRequest(Request request, IPEndPoint endpoint) { Response info = ProcessRequest(request, endpoint); if (info == null) { return; } using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { try { writer.WriteLong(secretHandshake); writer.Write(info); ArraySegment <byte> data = writer.ToArraySegment(); // signature matches // send response serverUdpClient.Send(data.Array, data.Count, endpoint); } catch (Exception ex) { Debug.LogException(ex, this); } } }