ENetClientServerTest.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 async void ServerEvent(EService service, Barrier barrier)
  31. {
  32. barrier.SignalAndWait();
  33. var eSocket = new ESocket(service);
  34. await eSocket.AcceptAsync();
  35. // Client断开,Server端收到Disconnect事件,结束Server线程
  36. eSocket.Disconnect += ev => service.Stop();
  37. for (int i = 0; i < pingPangCount; ++i)
  38. {
  39. var bytes = await eSocket.ReadAsync();
  40. CollectionAssert.AreEqual("0123456789".ToByteArray(), bytes);
  41. eSocket.WriteAsync("9876543210".ToByteArray());
  42. }
  43. }
  44. [TestMethod]
  45. public void ClientSendToServer()
  46. {
  47. const string hostName = "127.0.0.1";
  48. const ushort port = 8888;
  49. var clientHost = new EService();
  50. var serverHost = new EService(hostName, port);
  51. var serverThread = new Thread(() => serverHost.Start(10));
  52. var clientThread = new Thread(() => clientHost.Start(10));
  53. serverThread.Start();
  54. clientThread.Start();
  55. var barrier = new Barrier(2);
  56. // 往server host线程增加事件,accept
  57. serverHost.Events += () => ServerEvent(serverHost, barrier);
  58. barrier.SignalAndWait();
  59. // 往client host线程增加事件,client线程连接server
  60. clientHost.Events += () => ClientEvent(clientHost, hostName, port);
  61. serverThread.Join();
  62. clientThread.Join();
  63. }
  64. }
  65. }