public async Task CanSendAndReceivePsnPackets() { var server = new PsnServer("Test System", IPAddress.Loopback); var trackers = new[] { new PsnTracker(0, "Tracker Foo", Tuple.Create(1f, 2f, 3f), timestamp: 2452352452), new PsnTracker(1, "Tracker Bar", Tuple.Create(4f, 5f, 6f), Tuple.Create(7f, 8f, 9f)) }.ToList(); server.SetTrackers(trackers); var client = new PsnClient(IPAddress.Loopback); client.StartListening(); using (var monitoredClient = client.Monitor()) { server.SendData(); server.SendInfo(); await Task.Delay(100); monitoredClient.Should().Raise(nameof(PsnClient.DataPacketReceived)); monitoredClient.Should().Raise(nameof(PsnClient.InfoPacketReceived)); } var receivedTackers = client.Trackers.Values.ToList(); receivedTackers.Should().BeEquivalentTo(trackers, options => options.Excluding(o => o.DataLastReceived).Excluding(o => o.InfoLastReceived)); client.Dispose(); server.Dispose(); }
public static void Main(string[] args) { Console.WriteLine(new string('*', Console.WindowWidth - 1)); Console.WriteLine("Imp.PosiStageDotNet.Server Example"); Console.WriteLine(new string('*', Console.WindowWidth - 1)); Console.WriteLine(); PsnServer server; switch (args.Length) { case 0: server = new PsnServer(Environment.MachineName); Console.WriteLine( $"Sending on default multicast IP '{PsnServer.DefaultMulticastIp}', default port {PsnServer.DefaultPort}"); break; case 1: case 2: { IPAddress ip; if (!IPAddress.TryParse(args[0], out ip)) { Console.WriteLine($"Invalid IP address value '{args[0]}'"); return; } int port; if (args.Length == 2) { if (!int.TryParse(args[1], out port)) { Console.WriteLine($"Invalid UDP port value '{args[1]}'"); return; } if (port < ushort.MinValue + 1 || port > ushort.MaxValue) { Console.WriteLine($"UDP port value out of valid range '{args[1]}'"); return; } } else { port = PsnServer.DefaultPort; } server = new PsnServer(Environment.MachineName, ip, port); Console.WriteLine( $"Sending on custom multicast IP '{PsnServer.DefaultMulticastIp}', custom port {PsnServer.DefaultPort}"); } break; default: Console.WriteLine( "Invalid args. Format is 'Imp.PosiStageDotNet.Server [CustomMulticastIP] [CustomPort]"); Console.WriteLine("E.g. 'Imp.PosiStageDotNet.Server 236.10.10.10 56565"); return; } Console.WriteLine("Press any key to exit"); Console.WriteLine(""); Console.WriteLine(new string('*', Console.WindowWidth - 1)); Console.WriteLine(""); server.SetTrackers(createTrackers()); server.StartSending(); while (!Console.KeyAvailable) { server.SetTrackers(createTrackers()); Thread.Sleep(1000 / 60); } Console.WriteLine(""); Console.WriteLine(new string('*', Console.WindowWidth - 1)); Console.WriteLine(""); Console.WriteLine("Disposing server..."); server.Dispose(); Console.WriteLine("Server disposed. Exiting..."); Console.WriteLine(""); Console.WriteLine(new string('*', Console.WindowWidth - 1)); Console.WriteLine(""); }