DiscoveryMessageSequenceGenerator.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / DiscoveryMessageSequenceGenerator.cs / 1305376 / DiscoveryMessageSequenceGenerator.cs

                            //---------------------------------------------------------------- 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//---------------------------------------------------------------
namespace System.ServiceModel.Discovery
{ 
    using System;
    using System.Runtime; 
    using SR2 = System.ServiceModel.Discovery.SR; 

    public class DiscoveryMessageSequenceGenerator 
    {
        static readonly DateTime DT1970 = new DateTime(1970, 1, 1);

        long instanceId; 
        Uri sequenceId;
 
        [Fx.Tag.SynchronizationObject(Blocking = false, Kind = Fx.Tag.SynchronizationKind.InterlockedNoSpin)] 
        long messageNumber;
 
        public DiscoveryMessageSequenceGenerator()
            : this(CreateInstanceId(), null)
        {
        } 

        [Fx.Tag.Throws(typeof(ArgumentOutOfRangeException), "instanceId")] 
        public DiscoveryMessageSequenceGenerator(long instanceId, Uri sequenceId) 
        {
            if (instanceId < 0 || instanceId > UInt32.MaxValue) 
            {
                throw FxTrace.Exception.ArgumentOutOfRange("instanceId", instanceId, SR2.DiscoveryAppSequenceInstanceIdOutOfRange);
            }
            this.instanceId = instanceId; 
            this.sequenceId = sequenceId;
        } 
 
        static long CreateInstanceId()
        { 
            return (long)DateTime.Now.Subtract(DT1970).TotalSeconds;
        }

        [Fx.Tag.InheritThrows(From = "DiscoveryMessageSequenceGenerator", FromDeclaringType = typeof(DiscoveryMessageSequenceGenerator))] 
        public DiscoveryMessageSequence Next()
        { 
            return new DiscoveryMessageSequence(this.instanceId, this.sequenceId, Threading.Interlocked.Increment(ref this.messageNumber)); 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

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