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(); } }
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 }); }
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)); } }