ENetClient.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ENet
  7. {
  8. public class ENetClient
  9. {
  10. private readonly Host host;
  11. private readonly Dictionary<uint, TaskCompletionSource<Peer>> peerTcs = new Dictionary<uint, TaskCompletionSource<Peer>>();
  12. public ENetClient(uint peerLimit)
  13. {
  14. host = new Host(null, peerLimit);
  15. }
  16. public void Poll(int timeout)
  17. {
  18. while (host.Service(timeout) >= 0)
  19. {
  20. Event e;
  21. while (host.CheckEvents(out e) > 0)
  22. {
  23. switch (e.Type)
  24. {
  25. case EventType.Connect:
  26. {
  27. var tcs = peerTcs[e.Peer.ConnectID];
  28. tcs.TrySetResult(e.Peer);
  29. peerTcs.Remove(e.Peer.ConnectID);
  30. break;
  31. }
  32. case EventType.Receive:
  33. {
  34. break;
  35. }
  36. case EventType.Disconnect:
  37. {
  38. break;
  39. }
  40. }
  41. }
  42. }
  43. }
  44. public Task<Peer> ConnectAsync(string hostName, ushort port)
  45. {
  46. var tcs = new TaskCompletionSource<Peer>();
  47. var address = new Address { Host = "192.168.10.246", Port = 8901 };
  48. var peer = this.host.Connect(address, 2, 1);
  49. uint id = peer.ConnectID;
  50. peerTcs[id] = tcs;
  51. var t = tcs.Task;
  52. return t;
  53. }
  54. }
  55. }