ENetClientServerTest.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.Threading;
  2. using ENet;
  3. using Helper;
  4. using Log;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. namespace ENetCSTest
  7. {
  8. [TestClass]
  9. public class ENetClientServerTest
  10. {
  11. private static async void ClientEvent(ClientHost host, Address address)
  12. {
  13. var peer = await host.ConnectAsync(address);
  14. using (var sPacket = new Packet("0123456789".ToByteArray(), PacketFlags.Reliable))
  15. {
  16. peer.Send(0, sPacket);
  17. }
  18. using (var rPacket = await peer.ReceiveAsync())
  19. {
  20. Logger.Debug(rPacket.Bytes.ToStr());
  21. CollectionAssert.AreEqual("9876543210".ToByteArray(), rPacket.Bytes);
  22. }
  23. await peer.DisconnectAsync();
  24. host.Stop();
  25. }
  26. private static async void ServerEvent(ServerHost host, Barrier barrier)
  27. {
  28. var peer = await host.AcceptAsync();
  29. // Client断开,Server端收到Disconnect事件,结束Server线程
  30. peer.PeerEvent.Disconnect += ev => host.Stop();
  31. barrier.SignalAndWait();
  32. using (var rPacket = await peer.ReceiveAsync())
  33. {
  34. Logger.Debug(rPacket.Bytes.ToStr());
  35. CollectionAssert.AreEqual("0123456789".ToByteArray(), rPacket.Bytes);
  36. }
  37. using (var sPacket = new Packet("9876543210".ToByteArray(), PacketFlags.Reliable))
  38. {
  39. peer.Send(0, sPacket);
  40. }
  41. }
  42. [TestMethod]
  43. public void ClientSendToServer()
  44. {
  45. var address = new Address { HostName = "127.0.0.1", Port = 8888 };
  46. var clientHost = new ClientHost();
  47. var serverHost = new ServerHost(address);
  48. var serverThread = new Thread(() => serverHost.Start(10));
  49. var clientThread = new Thread(() => clientHost.Start(10));
  50. serverThread.Start();
  51. clientThread.Start();
  52. var barrier = new Barrier(2);
  53. // 往server host线程增加事件,accept
  54. serverHost.Events += () => ServerEvent(serverHost, barrier);
  55. barrier.SignalAndWait();
  56. // 往client host线程增加事件,client线程连接server
  57. clientHost.Events += () => ClientEvent(clientHost, address);
  58. serverThread.Join();
  59. clientThread.Join();
  60. }
  61. }
  62. }