示例#1
0
        internal Connection(ulong id, ConnectionState state, IPEndPoint endpoint, RuffleSocket socket)
        {
#if ALLOW_CONNECTION_STUB
            if (IsStub)
            {
                // NOOP
                return;
            }
#endif
            this.Id                              = id;
            this.Socket                          = socket;
            this.EndPoint                        = endpoint;
            this.MTU                             = Config.MinimumMTU;
            this.SmoothRoundtrip                 = 0;
            this.HighestRoundtripVarience        = 0;
            this.Roundtrip                       = 500;
            this.LowestRoundtrip                 = 500;
            this.LastMessageIn                   = NetTime.Now;
            this.LastMessageOut                  = NetTime.Now;
            this.ConnectionStarted               = NetTime.Now;
            this.ConnectionCompleted             = NetTime.Now;
            this.HandshakeStarted                = NetTime.Now;
            this.HandshakeLastSendTime           = NetTime.Now;
            this.HandshakeResendAttempts         = 0;
            this.ChallengeAnswer                 = 0;
            this.ConnectionChallenge             = RandomProvider.GetRandomULong();
            this.ChallengeDifficulty             = (byte)Config.ChallengeDifficulty;
            this.PreConnectionChallengeTimestamp = 0;
            this.PreConnectionChallengeCounter   = 0;
            this.PreConnectionChallengeIV        = 0;
            this.PreConnectionChallengeSolved    = false;
            this.State                           = state;

            if (Config.EnableBandwidthTracking && Config.CreateBandwidthTracker != null)
            {
                this.BandwidthTracker = Config.CreateBandwidthTracker();
            }

            if (Config.EnableHeartbeats)
            {
                this.HeartbeatChannel = new UnreliableOrderedChannel(0, this, Config, MemoryManager);
            }

            if (Config.EnablePacketMerging)
            {
                this.Merger = new MessageMerger(Config.MaxMergeMessageSize, Config.MinimumMTU, Config.MaxMergeDelay);
            }
        }