| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Channels
- {
- using System.Collections.Generic;
- using System.ServiceModel;
- using System.Diagnostics;
- using System.Runtime.Serialization;
- using System.ServiceModel.Diagnostics;
- [MessageContract(IsWrapped = false)]
- class ConnectInfo
- {
- [DataContract(Name = "ConnectInfo", Namespace = PeerStrings.Namespace)]
- class ConnectInfoDC
- {
- [DataMember(Name = "NodeId")]
- public ulong nodeId;
- [DataMember(Name = "Address")]
- public PeerNodeAddress address;
- public ConnectInfoDC() { }
- public ConnectInfoDC(ulong nodeId, PeerNodeAddress address)
- {
- this.nodeId = nodeId;
- this.address = address;
- }
- }
- [MessageBodyMember(Name = "Connect", Namespace = PeerStrings.Namespace)]
- ConnectInfoDC body;
- public ConnectInfo()
- {
- this.body = new ConnectInfoDC();
- }
- public ConnectInfo(ulong nodeId, PeerNodeAddress address)
- {
- this.body = new ConnectInfoDC(nodeId, address);
- }
- public PeerNodeAddress Address
- {
- get { return this.body.address; }
- }
- public ulong NodeId
- {
- get { return this.body.nodeId; }
- }
- public bool HasBody()
- {
- return body != null;
- }
- }
- [MessageContract(IsWrapped = false)]
- class DisconnectInfo
- {
- [DataContract(Name = "DisconnectInfo", Namespace = PeerStrings.Namespace)]
- class DisconnectInfoDC
- {
- [DataMember(Name = "Reason")]
- public DisconnectReason reason;
- [DataMember(Name = "Referrals")]
- public Referral[] referrals;
- public DisconnectInfoDC() { }
- public DisconnectInfoDC(DisconnectReason reason, Referral[] referrals)
- {
- this.reason = reason;
- this.referrals = referrals;
- }
- }
- [MessageBodyMember(Name = "Disconnect", Namespace = PeerStrings.Namespace)]
- DisconnectInfoDC body;
- public DisconnectInfo()
- {
- body = new DisconnectInfoDC();
- }
- public DisconnectInfo(DisconnectReason reason, Referral[] referrals)
- {
- this.body = new DisconnectInfoDC(reason, referrals);
- }
- public DisconnectReason Reason
- {
- get { return this.body.reason; }
- }
- public IList<Referral> Referrals
- {
- get
- {
- return this.body.referrals != null ? Array.AsReadOnly<Referral>(this.body.referrals) : null;
- }
- }
- public bool HasBody()
- {
- return body != null;
- }
- }
- // Reasons for sending a Disconnect message
- enum DisconnectReason
- {
- LeavingMesh = PeerCloseReason.LeavingMesh,
- NotUsefulNeighbor = PeerCloseReason.NotUsefulNeighbor,
- DuplicateNeighbor = PeerCloseReason.DuplicateNeighbor,
- DuplicateNodeId = PeerCloseReason.DuplicateNodeId,
- NodeBusy = PeerCloseReason.NodeBusy,
- InternalFailure = PeerCloseReason.InternalFailure,
- }
- //
- // Service contract used for neighbor-to-neighbor communication
- // Sending messages is asynchronous and processing incoming messages is synchronous.
- // Used for Service implementation
- //
- [ServiceContract(Name = PeerStrings.ServiceContractName,
- Namespace = PeerStrings.Namespace,
- SessionMode = SessionMode.Required,
- CallbackContract = typeof(IPeerServiceContract))]
- interface IPeerServiceContract
- {
- [OperationContract(IsOneWay = true, Action = PeerStrings.ConnectAction)]
- void Connect(ConnectInfo connectInfo);
- [OperationContract(IsOneWay = true, Action = PeerStrings.DisconnectAction)]
- void Disconnect(DisconnectInfo disconnectInfo);
- [OperationContract(IsOneWay = true, Action = PeerStrings.RefuseAction)]
- void Refuse(RefuseInfo refuseInfo);
- [OperationContract(IsOneWay = true, Action = PeerStrings.WelcomeAction)]
- void Welcome(WelcomeInfo welcomeInfo);
- [OperationContract(IsOneWay = true, Action = PeerStrings.FloodAction, AsyncPattern = true)]
- IAsyncResult BeginFloodMessage(Message floodedInfo, AsyncCallback callback, object state);
- void EndFloodMessage(IAsyncResult result);
- [OperationContract(IsOneWay = true, Action = PeerStrings.LinkUtilityAction)]
- void LinkUtility(UtilityInfo utilityInfo);
- [OperationContract(
- Action = TrustFeb2005Strings.RequestSecurityToken,
- ReplyAction = TrustFeb2005Strings.RequestSecurityTokenResponse)]
- Message ProcessRequestSecurityToken(Message message);
- [OperationContract(IsOneWay = true, Action = PeerStrings.PingAction)]
- void Ping(Message message);
- [OperationContract(IsOneWay = true, Action = Addressing10Strings.FaultAction)]
- void Fault(Message message);
- }
- [ServiceContract(Name = PeerStrings.ServiceContractName,
- Namespace = PeerStrings.Namespace,
- SessionMode = SessionMode.Required,
- CallbackContract = typeof(IPeerService))]
- interface IPeerProxy : IPeerServiceContract, IOutputChannel
- {
- }
- [ServiceContract(Name = PeerStrings.ServiceContractName,
- Namespace = PeerStrings.Namespace,
- SessionMode = SessionMode.Required,
- CallbackContract = typeof(IPeerProxy))]
- interface IPeerService : IPeerServiceContract
- {
- }
- static class PeerConnectorHelper
- {
- public static bool IsDefined(DisconnectReason value)
- {
- return ((value == DisconnectReason.LeavingMesh) ||
- (value == DisconnectReason.NotUsefulNeighbor) ||
- (value == DisconnectReason.DuplicateNeighbor) ||
- (value == DisconnectReason.DuplicateNodeId) ||
- (value == DisconnectReason.NodeBusy) ||
- (value == DisconnectReason.InternalFailure));
- }
- public static bool IsDefined(RefuseReason value)
- {
- return ((value == RefuseReason.DuplicateNodeId) ||
- (value == RefuseReason.DuplicateNeighbor) ||
- (value == RefuseReason.NodeBusy));
- }
- }
- [DataContract(Name = "Referral", Namespace = PeerStrings.Namespace)]
- class Referral
- {
- [DataMember(Name = "NodeId")]
- ulong nodeId; // Referral NodeId
- [DataMember(Name = "Address")]
- PeerNodeAddress address; // Referral address
- public Referral(ulong nodeId, PeerNodeAddress address)
- {
- this.nodeId = nodeId;
- this.address = address;
- }
- public PeerNodeAddress Address
- {
- get { return this.address; }
- set { this.address = value; }
- }
- public ulong NodeId
- {
- get { return this.nodeId; }
- set { this.nodeId = value; }
- }
- }
- [MessageContract(IsWrapped = false)]
- class RefuseInfo
- {
- [DataContract(Name = "RefuseInfo", Namespace = PeerStrings.Namespace)]
- class RefuseInfoDC
- {
- [DataMember(Name = "Reason")]
- public RefuseReason reason;
- [DataMember(Name = "Referrals")]
- public Referral[] referrals;
- public RefuseInfoDC() { }
- public RefuseInfoDC(RefuseReason reason, Referral[] referrals)
- {
- this.reason = reason;
- this.referrals = referrals;
- }
- }
- public RefuseInfo()
- {
- this.body = new RefuseInfoDC();
- }
- public RefuseInfo(RefuseReason reason, Referral[] referrals)
- {
- this.body = new RefuseInfoDC(reason, referrals);
- }
- [MessageBodyMember(Name = "Refuse", Namespace = PeerStrings.Namespace)]
- RefuseInfoDC body;
- public RefuseReason Reason
- {
- get { return this.body.reason; }
- }
- public IList<Referral> Referrals
- {
- get { return this.body.referrals != null ? Array.AsReadOnly<Referral>(this.body.referrals) : null; }
- }
- public bool HasBody()
- {
- return body != null;
- }
- }
- // Reasons for sending a Refuse message
- enum RefuseReason
- {
- DuplicateNeighbor = PeerCloseReason.DuplicateNeighbor,
- DuplicateNodeId = PeerCloseReason.DuplicateNodeId,
- NodeBusy = PeerCloseReason.NodeBusy,
- }
- [MessageContract(IsWrapped = false)]
- class UtilityInfo
- {
- [DataContract(Name = "LinkUtilityInfo", Namespace = PeerStrings.Namespace)]
- class UtilityInfoDC
- {
- [DataMember(Name = "Useful")]
- public uint useful;
- [DataMember(Name = "Total")]
- public uint total;
- public UtilityInfoDC() { }
- public UtilityInfoDC(uint useful, uint total)
- {
- this.useful = useful;
- this.total = total;
- }
- }
- public UtilityInfo()
- {
- this.body = new UtilityInfoDC();
- }
- public UtilityInfo(uint useful, uint total)
- {
- this.body = new UtilityInfoDC(useful, total);
- }
- [MessageBodyMember(Name = "LinkUtility", Namespace = PeerStrings.Namespace)]
- UtilityInfoDC body;
- public uint Useful
- {
- get { return body.useful; }
- }
- public uint Total
- {
- get { return body.total; }
- }
- public bool HasBody()
- {
- return body != null;
- }
- }
- [MessageContract(IsWrapped = false)]
- class WelcomeInfo
- {
- [DataContract(Name = "WelcomeInfo", Namespace = PeerStrings.Namespace)]
- class WelcomeInfoDC
- {
- [DataMember(Name = "NodeId")]
- public ulong nodeId;
- [DataMember(Name = "Referrals")]
- public Referral[] referrals;
- public WelcomeInfoDC() { }
- public WelcomeInfoDC(ulong nodeId, Referral[] referrals)
- {
- this.nodeId = nodeId;
- this.referrals = referrals;
- }
- }
- public WelcomeInfo()
- {
- this.body = new WelcomeInfoDC();
- }
- public WelcomeInfo(ulong nodeId, Referral[] referrals)
- {
- this.body = new WelcomeInfoDC(nodeId, referrals);
- }
- [MessageBodyMember(Name = "Welcome", Namespace = PeerStrings.Namespace)]
- WelcomeInfoDC body;
- public ulong NodeId
- {
- get { return this.body.nodeId; }
- }
- public IList<Referral> Referrals
- {
- get { return this.body.referrals != null ? Array.AsReadOnly<Referral>(this.body.referrals) : null; }
- }
- public bool HasBody()
- {
- return body != null;
- }
- }
- }
|