Ejemplo n.º 1
0
        private void Broadcast()
        {
            UdpClient client = new UdpClient();

            client.AllowNatTraversal(true);
            client.EnableBroadcast = true;

            while (!tokenSource.IsCancellationRequested)
            {
                CancellationTokenSource internalSource = new CancellationTokenSource();

                IPEndPoint serverEndpoint = new IPEndPoint(IPAddress.Any, Port);

                byte[] data = new byte[] { 0x00 };

                client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, Port));

                Task.Factory.StartNew(() =>
                {
                    client.Receive(ref serverEndpoint);
                    messageReceived.Set();
                }
                                      , internalSource.Token);

                if (messageReceived.WaitOne(PollingTime))
                {
                    ServerDiscoveredEventArgs args = new ServerDiscoveredEventArgs(serverEndpoint.Address.ToString(), new byte[] { 0x00 });
                    ServerDiscovered?.Invoke(this, args);
                }

                internalSource.Cancel();
            }
        }
Ejemplo n.º 2
0
 public void FindServers(ServerDiscovered callback)
 {
     lock (this)
     {
         servers           = new Dictionary <IPAddress, ServerNameMessage>();
         ServerDiscovered  = callback;
         threadFindServers = new Thread(new ThreadStart(StartFindServers));
         threadFindServers.Start();
     }
 }
Ejemplo n.º 3
0
        private void OnDiscovery(NetIncomingMessage msg)
        {
            var ip          = msg.SenderEndPoint;
            var playerCount = msg.ReadByte();
            var maxPlayers  = msg.ReadByte();

            ServerDiscovered?.Invoke(this, new ServerInfo
            {
                IP             = ip,
                PlayerCount    = playerCount,
                MaxPlayerCount = maxPlayers
            });
        }
Ejemplo n.º 4
0
        private void Socket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            try
            {
                uint   stringLength    = args.GetDataReader().UnconsumedBufferLength;
                string receivedMessage = args.GetDataReader().ReadString(stringLength);

                Logger.LogDebug(String.Format("Got a control message from the CCS: {0}", receivedMessage));
                IDictionary <string, dynamic> control = JsonConvert.DeserializeObject <IDictionary <string, dynamic> >(receivedMessage);

                // Three things are discovered here: the hostname of the CCS, the REST API port and the dedicated certificate authentication port.
                Logger.LogInformation(String.Format("Discovered a CCS server at {0}, with SSL port {1} and CertAuth port {2}.", (string)control["hostname"], Convert.ToString((long)control["port"]), Convert.ToString((long)control["certPort"])));
                ServerDiscovered?.Invoke(control);
            }
            catch (Exception e)
            {
                Logger.LogError("Unable to retrieve the UDP message because an exception was thrown.", e);
            }
        }
        private void OnMessageReceived(object sender, MessegeReceviedEventArgs args)
        {
            if (args.Payload.MessageTypeName == typeof(SubscribeSuccessMessage).Name)
            {
                _isDiscoveryResponseBussSubsciribed = true;
                while (_discoveryMessagesQueue.Count > 0)
                {
                    var message = _discoveryMessagesQueue.Dequeue();
                    SendDicoveryRequest(message);
                }
            }

            if (args.Payload.MessageTypeName == typeof(DiscoveryResponseMessage).Name)
            {
                var payload = (DiscoveryResponseMessage)args.Payload;
                Console.WriteLine($"{payload.NodIpEndPoint} : {payload.DataQuantity}");
                ServerDiscovered?.Invoke(this,
                                         new ServerDiscoveredEventArgs(payload.NodIpEndPoint, payload.DataQuantity));
            }
        }