ENetClientServerTest.cs 1.8 KB

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