TServiceTest.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using Common.Helper;
  5. using Common.Network;
  6. using NUnit.Framework;
  7. using TNet;
  8. namespace TNetTest
  9. {
  10. [TestFixture]
  11. public class TServiceTest
  12. {
  13. private readonly Barrier barrier = new Barrier(3);
  14. private async void ClientEvent(IService service, string hostName, ushort port)
  15. {
  16. AChannel channel = await service.GetChannel(hostName, port);
  17. channel.SendAsync("0123456789".ToByteArray());
  18. byte[] bytes = await channel.RecvAsync();
  19. CollectionAssert.AreEqual("9876543210".ToByteArray(), bytes);
  20. this.barrier.RemoveParticipant();
  21. }
  22. private async void ServerEvent(IService service)
  23. {
  24. AChannel channel = await service.GetChannel();
  25. byte[] bytes = await channel.RecvAsync();
  26. CollectionAssert.AreEqual("0123456789".ToByteArray(), bytes);
  27. Array.Reverse(bytes);
  28. channel.SendAsync(bytes);
  29. this.barrier.RemoveParticipant();
  30. }
  31. [Test]
  32. public void ClientSendToServer()
  33. {
  34. const string hostName = "127.0.0.1";
  35. const ushort port = 8889;
  36. IService clientService = new TService();
  37. IService serverService = new TService(hostName, 8889);
  38. Task.Factory.StartNew(() => clientService.Run(), TaskCreationOptions.LongRunning);
  39. Task.Factory.StartNew(() => serverService.Run(), TaskCreationOptions.LongRunning);
  40. // 往server host线程增加事件,accept
  41. serverService.Add(() => this.ServerEvent(serverService));
  42. Thread.Sleep(1000);
  43. // 往client host线程增加事件,client线程连接server
  44. clientService.Add(() => this.ClientEvent(clientService, hostName, port));
  45. this.barrier.SignalAndWait();
  46. }
  47. }
  48. }