private async Task HandleReceive(UdpReceiveResult received) { var message = Encoding.UTF8.GetString(received.Buffer); if (!string.Equals(message, GrpcHandshakeClientMessage.Message)) { _logger.LogDebug("Discarding message - invalid (Origin: {Origin})", received.RemoteEndPoint.Address.ToString()); return; } _logger.LogInformation("Received handshake from [{Address}]", received.RemoteEndPoint); var ports = _settings.Value.PublicHttpsPorts; var replyText = GrpcHandshakeFormatter.Write(Environment.MachineName, ports); await _channel.SendToAsync(Encoding.UTF8.GetBytes(replyText), received.RemoteEndPoint); _logger.LogDebug("Reply \"{Message}\" sent to {Address}", replyText, received.RemoteEndPoint.Address.ToString()); }
private void ServerContactReceived(UdpReceiveResult obj) { Log.Debug("Received UDP package from {Address}", obj.RemoteEndPoint.Address.ToString()); var message = GrpcHandshakeFormatter.Parse(obj.Buffer); if (string.IsNullOrEmpty(message.MachineName)) { Log.Debug("Discarding Endpoint because hostname is empty."); return; } var index = _dataItems.FindIndex(d => CompareEndpoints(d.EndPoint, obj.RemoteEndPoint)); if (index >= 0) { Log.Trace("Updating endpoint for {Name} to {@Ports}", message.MachineName, message.Ports); _dataItems[index].LastSeen = DateTime.Now; _dataItems[index].HttpsPorts = message.Ports; _dataItems[index].MachineName = message.MachineName; MainThread.BeginInvokeOnMainThread(() => NotifyItemChanged(index)); // NotifyItemChanged(index); } else { _dataItems.Add(new ServerDataItem() { HttpsPorts = message.Ports, MachineName = message.MachineName, LastSeen = DateTime.Now, EndPoint = obj.RemoteEndPoint }); var indexUpdate = _dataItems.Count - 1; Log.Trace("Adding endpoint for {Name}, at address {Endpoint} to {@Ports}", message.MachineName, obj.RemoteEndPoint, message.Ports); MainThread.BeginInvokeOnMainThread(() => NotifyItemInserted(indexUpdate)); // NotifyItemInserted(_dataItems.Count - 1); } }