IPeerConnectorContract.cs 4.4 KB

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