コード例 #1
0
        public Letter.Letter Build()
        {
            var letter = new Letter.Letter {Type = LetterType.Batch, Options = _batchOptions};

            int lettersInBatch = _letters.Count;
            letter.Parts = new byte[lettersInBatch][];
            for(int i = 0; i < lettersInBatch; i++)
                letter.Parts[i] = _serializer.Serialize(_letters.Dequeue());

            return letter;
        }
コード例 #2
0
ファイル: AbstractChannel.cs プロジェクト: riax/Clr
        private void LockedShutdown(ShutdownReason reason)
        {
            _shutdownRequested = true;

            if (!_remoteShutdownRequested)
            {
                ChannelDisconnecting(this, reason);
            }

            if (reason == ShutdownReason.Requested)
            {
                var letter = new Letter.Letter(LetterOptions.Ack)
                {
                    Type = LetterType.Shutdown
                };
                Enqueue(letter);

                if (_options.ShutdownGrace.TotalMilliseconds > 0)
                {
                    Thread.Sleep((int)_options.ShutdownGrace.TotalMilliseconds);
                }
                else
                {
                    Thread.Sleep(10);
                }
            }

            _initalizationCount = 0;
            bool wasConnected = IsConnected;

            IsConnected = false;

            if (_transmitter != null)
            {
                _transmitter.Stop();
            }
            if (_receiver != null)
            {
                _receiver.Stop();
            }

            DisconnectSocket();
            WaitForTranseiviersToShutDown();

            FailQueuedLetters();
            FailedReceivedLetters();

            if (wasConnected)
            {
                ChannelDisconnected(this, _remoteShutdownRequested ? ShutdownReason.Remote : reason);
                AfterDisconnectHook(reason);
            }
        }
コード例 #3
0
        public Letter.Letter Build()
        {
            var letter = new Letter.Letter {
                Type = LetterType.Batch, Options = _batchOptions
            };

            int lettersInBatch = _letters.Count;

            letter.Parts = new byte[lettersInBatch][];
            for (int i = 0; i < lettersInBatch; i++)
            {
                letter.Parts[i] = _serializer.Serialize(_letters.Dequeue());
            }

            return(letter);
        }
コード例 #4
0
        private void LockedShutdown(ShutdownReason reason)
        {
            if (!_remoteShutdownRequested)
            {
                ChannelDisconnecting?.Invoke(this, reason);
            }

            if (reason == ShutdownReason.Requested)
            {
                var letter = new Letter.Letter(LetterOptions.Ack)
                {
                    Type = LetterType.Shutdown
                };
                InternalEnqueue(letter);

                if (_options.ShutdownGrace.TotalMilliseconds > 0)
                {
                    Thread.Sleep((int)_options.ShutdownGrace.TotalMilliseconds);
                }
                else
                {
                    Thread.Sleep(10);
                }
            }

            bool wasConnected = IsConnected;

            _initalizationCount = 0;
            IsConnected         = false;

            _transmitter?.Stop();
            _receiver?.Stop();

            DisconnectSocket();
            WaitForTranseiviersToShutDown();

            FailQueuedLetters();
            FailedReceivedLetters();

            if (wasConnected)
            {
                ChannelDisconnected?.Invoke(this, _remoteShutdownRequested ? ShutdownReason.Remote : reason);
            }
        }
コード例 #5
0
ファイル: TypedHyperSocket.cs プロジェクト: riax/Clr
        private ILetter CreateLetter <T>(T value, LetterOptions options, Guid conversationId)
        {
            var metadata = new Metadata(value.GetType())
            {
                ConversationId = conversationId
            };

            var parts = new byte[2][];

            parts[0] = Serializer.Serialize(metadata);
            parts[1] = Serializer.Serialize(value);

            var letter = new Letter.Letter(options)
            {
                Type = LetterType.User, Parts = parts
            };

            return(letter);
        }
コード例 #6
0
ファイル: AbstractChannel.cs プロジェクト: riax/Clr
        private void LockedShutdown(ShutdownReason reason)
        {
            _shutdownRequested = true;

            if(!_remoteShutdownRequested)
                ChannelDisconnecting(this, reason);

            if(reason == ShutdownReason.Requested) {
                var letter = new Letter.Letter(LetterOptions.Ack) {Type = LetterType.Shutdown};
                Enqueue(letter);

                if(_options.ShutdownGrace.TotalMilliseconds > 0)
                    Thread.Sleep((int) _options.ShutdownGrace.TotalMilliseconds);
                else
                    Thread.Sleep(10);
            }

            _initalizationCount = 0;
            bool wasConnected = IsConnected;
            IsConnected = false;

            if(_transmitter != null) _transmitter.Stop();
            if(_receiver != null) _receiver.Stop();

            DisconnectSocket();
            WaitForTranseiviersToShutDown();

            FailQueuedLetters();
            FailedReceivedLetters();

            if(wasConnected) {
                ChannelDisconnected(this, _remoteShutdownRequested ? ShutdownReason.Remote : reason);
                AfterDisconnectHook(reason);
            }
        }