IPeerConnectorContract.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. using System;
  2. using System.Runtime.Serialization;
  3. using System.ServiceModel;
  4. using System.ServiceModel.Channels;
  5. using System.ServiceModel.PeerResolvers;
  6. using System.ServiceModel.Description;
  7. namespace System.ServiceModel.PeerResolvers
  8. {
  9. [ServiceContract (Namespace = Constants.NetPeer, SessionMode = SessionMode.Allowed, CallbackContract = typeof (IPeerConnectorContract))]
  10. internal interface IPeerConnectorContract
  11. {
  12. [OperationContract (Action = Constants.NetPeer + "/Connect", IsOneWay = true)]
  13. void Connect (ConnectInfo connect);
  14. [OperationContract (Action = Constants.NetPeer + "/Welcome", IsOneWay = true)]
  15. void Welcome (WelcomeInfo welcome);
  16. [OperationContract (Action = Constants.NetPeer + "/Refuse", IsOneWay = true)]
  17. void Refuse (RefuseInfo refuse);
  18. [OperationContract (Action = Constants.NetPeer + "/Disconnect", IsOneWay = true)]
  19. void Disconnect (DisconnectInfo disconnect);
  20. [OperationContract (Action = Constants.NetPeer + "/LinkUtility", IsOneWay = true)]
  21. void LinkUtility (LinkUtilityInfo linkUtility);
  22. [OperationContract (Action = Constants.NetPeer + "/Ping", IsOneWay = true)]
  23. void Ping ();
  24. [OperationContract (Action = "*", IsOneWay = true)]
  25. void SendMessage (Message msg);
  26. }
  27. // Common datatype
  28. [DataContract (Name = "Referral", Namespace = Constants.NetPeer)]
  29. internal class Referral
  30. {
  31. [DataMember]
  32. public ulong Id { get; set; }
  33. [DataMember]
  34. public PeerNodeAddress PeerNodeAddress { get; set; }
  35. }
  36. internal enum RefuseReason
  37. {
  38. DuplicateNeighbor,
  39. DuplicateNodeId,
  40. NodeBusy,
  41. }
  42. internal enum DisconnectReason
  43. {
  44. LeavingMesh,
  45. NotUsefulNeighbor,
  46. DuplicateNeighbor,
  47. DuplicateNodeId,
  48. }
  49. // Connect
  50. [DataContract (Name = "Connect", Namespace = Constants.NetPeer)]
  51. internal class ConnectInfoDC
  52. {
  53. [DataMember]
  54. public PeerNodeAddress Address { get; set; }
  55. [DataMember]
  56. public ulong NodeId { get; set; }
  57. }
  58. [MessageContract (IsWrapped = false)]
  59. internal class ConnectInfo
  60. {
  61. public ConnectInfo ()
  62. {
  63. dc = new ConnectInfoDC ();
  64. }
  65. [MessageBodyMember (Name = "Connect", Namespace = Constants.NetPeer)]
  66. ConnectInfoDC dc;
  67. public PeerNodeAddress Address {
  68. get { return dc.Address; }
  69. set { dc.Address = value; }
  70. }
  71. public ulong NodeId {
  72. get { return dc.NodeId; }
  73. set { dc.NodeId = value; }
  74. }
  75. }
  76. // Welcome
  77. [DataContract (Name = "Welcome", Namespace = Constants.NetPeer)]
  78. internal class WelcomeInfoDC
  79. {
  80. [DataMember]
  81. public ulong NodeId { get; set; }
  82. [DataMember]
  83. public Referral [] Referrals { get; set; }
  84. }
  85. [MessageContract (IsWrapped = false)]
  86. internal class WelcomeInfo
  87. {
  88. public WelcomeInfo ()
  89. {
  90. dc = new WelcomeInfoDC ();
  91. }
  92. [MessageBodyMember (Name = "Welcome", Namespace = Constants.NetPeer)]
  93. WelcomeInfoDC dc;
  94. public ulong NodeId {
  95. get { return dc.NodeId; }
  96. set { dc.NodeId = value; }
  97. }
  98. public Referral [] Referrals {
  99. get { return dc.Referrals; }
  100. set { dc.Referrals = value; }
  101. }
  102. }
  103. // Refuse
  104. [DataContract (Name = "Refuse", Namespace = Constants.NetPeer)]
  105. internal class RefuseInfoDC
  106. {
  107. [DataMember]
  108. public Referral [] Referrals { get; set; }
  109. [DataMember]
  110. public RefuseReason Reason { get; set; }
  111. }
  112. [MessageContract (IsWrapped = false)]
  113. internal class RefuseInfo
  114. {
  115. public RefuseInfo ()
  116. {
  117. dc = new RefuseInfoDC ();
  118. }
  119. [MessageBodyMember (Name = "Refuse", Namespace = Constants.NetPeer)]
  120. RefuseInfoDC dc;
  121. public Referral [] Referrals {
  122. get { return dc.Referrals; }
  123. set { dc.Referrals = value; }
  124. }
  125. public RefuseReason Reason {
  126. get { return dc.Reason; }
  127. set { dc.Reason = value; }
  128. }
  129. }
  130. // Disconnect
  131. [DataContract (Name = "Disconnect", Namespace = Constants.NetPeer)]
  132. internal class DisconnectInfoDC
  133. {
  134. [DataMember]
  135. public Referral [] Referrals { get; set; }
  136. [DataMember]
  137. public DisconnectReason Reason { get; set; }
  138. }
  139. [MessageContract (IsWrapped = false)]
  140. internal class DisconnectInfo
  141. {
  142. public DisconnectInfo ()
  143. {
  144. dc = new DisconnectInfoDC ();
  145. }
  146. [MessageBodyMember (Name = "Disconnect", Namespace = Constants.NetPeer)]
  147. DisconnectInfoDC dc;
  148. public Referral [] Referrals {
  149. get { return dc.Referrals; }
  150. set { dc.Referrals = value; }
  151. }
  152. public DisconnectReason Reason {
  153. get { return dc.Reason; }
  154. set { dc.Reason = value; }
  155. }
  156. }
  157. // LinkUtilityInfo
  158. [DataContract (Name = "LinkUtilityInfo", Namespace = Constants.NetPeer)]
  159. internal class LinkUtilityInfoDC
  160. {
  161. [DataMember]
  162. public uint Total { get; set; }
  163. [DataMember]
  164. public uint Useful { get; set; }
  165. }
  166. [MessageContract (IsWrapped = false)]
  167. internal class LinkUtilityInfo
  168. {
  169. public LinkUtilityInfo ()
  170. {
  171. dc = new LinkUtilityInfoDC ();
  172. }
  173. [MessageBodyMember (Name = "LinkUtilityInfo", Namespace = Constants.NetPeer)]
  174. LinkUtilityInfoDC dc;
  175. public uint Total {
  176. get { return dc.Total; }
  177. set { dc.Total = value; }
  178. }
  179. public uint Useful {
  180. get { return dc.Useful; }
  181. set { dc.Useful = value; }
  182. }
  183. }
  184. }