ENetClientServerTest.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System.Diagnostics;
  2. using System.Threading;
  3. using ENet;
  4. using Common.Helper;
  5. using Common.Logger;
  6. using Microsoft.VisualStudio.TestTools.UnitTesting;
  7. namespace ENetTest
  8. {
  9. [TestClass]
  10. public class ENetClientServerTest
  11. {
  12. private const int pingPangCount = 10000;
  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. Log.Debug("time: {0}", stopWatch.ElapsedMilliseconds);
  27. await eSocket.DisconnectAsync();
  28. service.Stop();
  29. }
  30. private static async void ServerEvent(EService service, Barrier barrier)
  31. {
  32. barrier.SignalAndWait();
  33. bool isRunning = true;
  34. while (isRunning)
  35. {
  36. Log.Debug("start accept");
  37. var eSocket = new ESocket(service);
  38. await eSocket.AcceptAsync();
  39. eSocket.Disconnect += ev =>
  40. {
  41. isRunning = false;
  42. service.Stop();
  43. };
  44. Echo(eSocket);
  45. }
  46. }
  47. private static async void Echo(ESocket eSocket)
  48. {
  49. for (int i = 0; i < pingPangCount; ++i)
  50. {
  51. var bytes = await eSocket.ReadAsync();
  52. CollectionAssert.AreEqual("0123456789".ToByteArray(), bytes);
  53. eSocket.WriteAsync("9876543210".ToByteArray());
  54. }
  55. }
  56. [TestMethod]
  57. public void ClientSendToServer()
  58. {
  59. const string hostName = "127.0.0.1";
  60. const ushort port = 8888;
  61. var clientHost = new EService();
  62. var serverHost = new EService(hostName, port);
  63. var serverThread = new Thread(() => serverHost.Start());
  64. var clientThread = new Thread(() => clientHost.Start());
  65. serverThread.Start();
  66. clientThread.Start();
  67. var barrier = new Barrier(2);
  68. // 往server host线程增加事件,accept
  69. serverHost.Events += () => ServerEvent(serverHost, barrier);
  70. barrier.SignalAndWait();
  71. // 往client host线程增加事件,client线程连接server
  72. clientHost.Events += () => ClientEvent(clientHost, hostName, port);
  73. serverThread.Join();
  74. clientThread.Join();
  75. }
  76. }
  77. }