Example #1
0
        private PreallocatedChannelData CreateChannelData()
        {
            PreallocatedChannelData channelData = new PreallocatedChannelData();

            channelData.InitReceiver(bufferManager);
            channelData.InitSender(bufferManager);

            return(channelData);
        }
Example #2
0
        private void OnServerAcceptorAccepted(object sender, SocketEventArgs e)
        {
            PreallocatedChannelData channelResources = GetChannelData();

            ISocketChannel channel = new ImmutableChannel(e.Socket, channelResources.Receiver, channelResources.Sender, channelResources.ReceiverArgs, channelResources.SenderWriter, channelResources);

            channel.Closed += OnChannelClosed;

            RaiseConnected(channel);

            channel.Start();
        }
Example #3
0
        private void OnChannelClosed(object sender, EventArgs e)
        {
            if (channelDataPool != null)
            {
                PreallocatedChannelData channelResources = (PreallocatedChannelData)((ImmutableChannel)sender).AdditionalData;
                channelDataPool.PutObject(channelResources);
            }
            else if (state == (int)ServerState.Stopped)  // perform expensive ter down only if server doesn't listen anymore
            {                                            // this way you can stop listener and then close all the channels to free resources
                PreallocatedChannelData channelResources = (PreallocatedChannelData)((ImmutableChannel)sender).AdditionalData;

                channelResources.Receiver.TearDown(false);
                channelResources.Sender.TearDown();
            }

            serverAcceptor.ReleaseOpenConnectionSlot();
        }