ENetClientServerTest.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System.Threading;
  2. using ENet;
  3. using Helper;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. namespace ENetCSTest
  6. {
  7. [TestClass]
  8. public class ENetClientServerTest
  9. {
  10. private static async void ClientEvent(IOService service, string hostName, ushort port)
  11. {
  12. var eSocket = new ESocket(service);
  13. await eSocket.ConnectAsync(hostName, port);
  14. eSocket.WriteAsync("0123456789".ToByteArray());
  15. var bytes = await eSocket.ReadAsync();
  16. CollectionAssert.AreEqual("9876543210".ToByteArray(), bytes);
  17. await eSocket.DisconnectAsync();
  18. service.Stop();
  19. }
  20. private static async void ServerEvent(IOService service, Barrier barrier)
  21. {
  22. barrier.SignalAndWait();
  23. var eSocket = new ESocket(service);
  24. await eSocket.AcceptAsync();
  25. // Client断开,Server端收到Disconnect事件,结束Server线程
  26. eSocket.ESocketEvent.Disconnect += ev => service.Stop();
  27. var bytes = await eSocket.ReadAsync();
  28. CollectionAssert.AreEqual("0123456789".ToByteArray(), bytes);
  29. eSocket.WriteAsync("9876543210".ToByteArray(), 0, PacketFlags.Reliable);
  30. }
  31. [TestMethod]
  32. public void ClientSendToServer()
  33. {
  34. const string hostName = "127.0.0.1";
  35. const ushort port = 8888;
  36. var clientHost = new IOService();
  37. var serverHost = new IOService(hostName, port);
  38. var serverThread = new Thread(() => serverHost.Start(10));
  39. var clientThread = new Thread(() => clientHost.Start(10));
  40. serverThread.Start();
  41. clientThread.Start();
  42. var barrier = new Barrier(2);
  43. // 往server host线程增加事件,accept
  44. serverHost.Events += () => ServerEvent(serverHost, barrier);
  45. barrier.SignalAndWait();
  46. // 往client host线程增加事件,client线程连接server
  47. clientHost.Events += () => ClientEvent(clientHost, hostName, port);
  48. serverThread.Join();
  49. clientThread.Join();
  50. }
  51. }
  52. }