PeerNode.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / PeerNode.cs / 1 / PeerNode.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.ServiceModel 
{
 
    using System; 
    using System.Collections;
    using System.Collections.Generic; 
    using System.Globalization;
    using System.ServiceModel.Dispatcher;
    using System.ServiceModel.Channels;
    using System.Threading; 

    public sealed class PeerNode : IOnlineStatus 
    { 
        PeerNodeImplementation innerNode = null;
        SynchronizationContext synchronizationContext = null; 
        MessageEncodingBindingElement encoderElement;

        internal PeerNode(PeerNodeImplementation peerNode)
        { 
            this.innerNode = peerNode;
        } 
 
        public event EventHandler Offline;
        public event EventHandler Online; 

        internal void FireOffline(object source, EventArgs args)
        {
            FireEvent(Offline, source, args); 
        }
 
        internal void FireOnline(object source, EventArgs args) 
        {
            FireEvent(Online, source, args); 
        }

        void FireEvent(EventHandler handler, object source, EventArgs args)
        { 
            if(handler != null)
            { 
                try 
                {
                    SynchronizationContext context = synchronizationContext; 
                    if(context != null)
                    {
                        context.Send( delegate (object state) { handler(source, args); }, null);
                    } 
                    else
                    { 
                        handler(source, args); 
                    }
                } 
                catch(Exception e)
                {
                    if(DiagnosticUtility.IsFatal(e)) throw;
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperCallback(SR.GetString(SR.NotificationException), e); 
                }
            } 
        } 

        public bool IsOnline { get { return InnerNode.IsOnline; } } 

        internal bool IsOpen { get { return InnerNode.IsOpen; } }

        public int Port { get { return InnerNode.ListenerPort; } } 

        public PeerMessagePropagationFilter MessagePropagationFilter 
        { 
            get { return InnerNode.MessagePropagationFilter; }
            set { InnerNode.MessagePropagationFilter = value; } 
        }

        internal    void    OnOpen()
        { 
            synchronizationContext = ThreadBehavior.GetCurrentSynchronizationContext();
            this.innerNode.Offline += FireOffline; 
            this.innerNode.Online += FireOnline; 
            this.innerNode.EncodingElement = this.encoderElement;
        } 

        internal    void    OnClose()
        {
            this.innerNode.Offline -= FireOffline; 
            this.innerNode.Online -= FireOnline;
            synchronizationContext = null; 
        } 

        internal    PeerNodeImplementation InnerNode 
        {
            get { return innerNode; }
        }
 
        public void    RefreshConnection()
        { 
            PeerNodeImplementation node = InnerNode; 
            if(node != null)
            { 
                node.RefreshConnection();
            }
        }
 
        public override string ToString()
        { 
            if(this.IsOpen) 
            {
                return SR.GetString(SR.PeerNodeToStringFormat, this.InnerNode.MeshId, this.InnerNode.NodeId, this.IsOnline, this.IsOpen, this.Port); 
            }
            else
            {
                return SR.GetString(SR.PeerNodeToStringFormat, "", -1, this.IsOnline, this.IsOpen, -1); 
            }
        } 
 
        private MessageEncodingBindingElement EncodingElement
        { 
        get {return this.encoderElement;}
        set {this.encoderElement = value;}

        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK