IPeerConnectorContract.cs 5.3 KB

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