/// <summary> /// Processes GetNeighbourNodesByDistanceLocalRequest message from client. /// <para>Obtains information about the profile server's neighborhood and initiates sending updates to it.</para> /// </summary> /// <param name="Client">TCP client that sent the request.</param> /// <param name="MessageBuilder">Client's message builder.</param> /// <param name="RequestMessage">Full request message.</param> /// <param name="KeepAlive">This is set to true if KeepAliveAndSendUpdates in the request was set.</param> /// <returns>Response message to be sent to the client.</returns> public Message ProcessMessageGetNeighbourNodesByDistanceLocalRequest(TcpClient Client, MessageBuilderLocNet MessageBuilder, Message RequestMessage, out bool KeepAlive) { log.Trace("()"); Message res = null; GetNeighbourNodesByDistanceLocalRequest getNeighbourNodesByDistanceLocalRequest = RequestMessage.Request.LocalService.GetNeighbourNodes; KeepAlive = getNeighbourNodesByDistanceLocalRequest.KeepAliveAndSendUpdates; List <NodeInfo> neighborList = new List <NodeInfo>(); lock (neighborsLock) { foreach (ProfileServer ps in neighbors.Values) { NodeInfo ni = ps.GetNodeInfo(); neighborList.Add(ni); } } res = MessageBuilder.CreateGetNeighbourNodesByDistanceLocalResponse(RequestMessage, neighborList); log.Trace("(-):*.Response.Status={0}", res.Response.Status); return(res); }