ENetClientServerTest.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.Diagnostics;
  2. using System.Threading;
  3. using ENet;
  4. using Helper;
  5. using Log;
  6. using Microsoft.VisualStudio.TestTools.UnitTesting;
  7. namespace ENetCSTest
  8. {
  9. [TestClass]
  10. public class ENetClientServerTest
  11. {
  12. private const int pingPangCount = 1000;
  13. private static async void ClientEvent(EService service, string hostName, ushort port)
  14. {
  15. var eSocket = new ESocket(service);
  16. await eSocket.ConnectAsync(hostName, port);
  17. var stopWatch = new Stopwatch();
  18. stopWatch.Start();
  19. for (int i = 0; i < pingPangCount; ++i)
  20. {
  21. eSocket.WriteAsync("0123456789".ToByteArray());
  22. var bytes = await eSocket.ReadAsync();
  23. CollectionAssert.AreEqual("9876543210".ToByteArray(), bytes);
  24. }
  25. stopWatch.Stop();
  26. Logger.Debug("time: {0}", stopWatch.ElapsedMilliseconds);
  27. await eSocket.DisconnectAsync();
  28. service.Stop();
  29. }
  30. private static void ServerEvent(EService service, Barrier barrier)
  31. {
  32. barrier.SignalAndWait();
  33. StartAccept(service);
  34. }
  35. private static async void StartAccept(EService service)
  36. {
  37. var eSocket = new ESocket(service);
  38. await eSocket.AcceptAsync(() => StartAccept(service));
  39. // Client断开,Server端收到Disconnect事件,结束Server线程
  40. eSocket.Disconnect += ev => service.Stop();
  41. for (int i = 0; i < pingPangCount; ++i)
  42. {
  43. var bytes = await eSocket.ReadAsync();
  44. CollectionAssert.AreEqual("0123456789".ToByteArray(), bytes);
  45. eSocket.WriteAsync("9876543210".ToByteArray());
  46. }
  47. }
  48. [TestMethod]
  49. public void ClientSendToServer()
  50. {
  51. const string hostName = "127.0.0.1";
  52. const ushort port = 8888;
  53. var clientHost = new EService();
  54. var serverHost = new EService(hostName, port);
  55. var serverThread = new Thread(() => serverHost.Start(10));
  56. var clientThread = new Thread(() => clientHost.Start(10));
  57. serverThread.Start();
  58. clientThread.Start();
  59. var barrier = new Barrier(2);
  60. // 往server host线程增加事件,accept
  61. serverHost.Events += () => ServerEvent(serverHost, barrier);
  62. barrier.SignalAndWait();
  63. // 往client host线程增加事件,client线程连接server
  64. clientHost.Events += () => ClientEvent(clientHost, hostName, port);
  65. serverThread.Join();
  66. clientThread.Join();
  67. }
  68. }
  69. }