예제 #1
0
        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());
        }
예제 #2
0
        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);
            }
        }