public WebSocketClient(
            Uri url,
            WebSocketMessageSender sender       = null,
            ReceiverMemoryConfig receiverConfig = null,
            ILogger logger                       = null,
            string name                          = "CLIENT",
            Encoding messageEncoding             = null,
            Func <ClientWebSocket> clientFactory = null)
        {
            if (!ValidationUtils.ValidateInput(url))
            {
                throw new ArgumentNullException(nameof(url));
            }

            Url             = url;
            Name            = name;
            _logger         = logger;
            MessageEncoding = messageEncoding ?? Encoding.UTF8;

            receiverConfig = receiverConfig ?? ReceiverMemoryConfig.Default; //cannot use =?? in unity
            _memoryPool    = new MemoryPool(receiverConfig.InitialMemorySize, receiverConfig.MarginSize, logger);

            _clientFactory = clientFactory ?? DefaultClientFactory;

            _webSocketMessageSender = sender?.AsCore() ?? new SingleQueueSenderCore();
            _webSocketMessageSender.SetConfig(MessageEncoding, logger, Name);

            _webSocketMessageSender
            .ExceptionHappenedInSending
            .Subscribe(x =>
            {
                _backgroundExceptionQueue.Enqueue(x);
                Dispose();
            });
        }
        public WebSocketClient(
            WebSocket connectedSocket,
            WebSocketMessageSender sender       = null,
            ReceiverMemoryConfig receiverConfig = null,
            ILogger logger           = null,
            string name              = "CLIENT",
            Encoding messageEncoding = null)
        {
            _socket = connectedSocket ?? throw new ArgumentNullException(nameof(connectedSocket));

            Url            = null;
            _clientFactory = null;

            Name            = name;
            _logger         = logger;
            MessageEncoding = messageEncoding ?? Encoding.UTF8;

            receiverConfig = receiverConfig ?? ReceiverMemoryConfig.Default;
            _memoryPool    = new MemoryPool(receiverConfig.InitialMemorySize, receiverConfig.MarginSize, logger);

            _webSocketMessageSender = sender?.AsCore() ?? new SingleQueueSenderCore();
            _webSocketMessageSender.SetConfig(MessageEncoding, logger, Name);

            _webSocketMessageSender
            .ExceptionHappenedInSending
            .Subscribe(x =>
            {
                _backgroundExceptionQueue.Enqueue(x);
                Dispose();
            });
        }
Example #3
0
 public SingleQueueSender(int capacity)
 {
     if (0 <= capacity)
     {
         var channel = Channel.CreateBounded <SentMessage>(new BoundedChannelOptions(capacity)
         {
             SingleReader = true, SingleWriter = false
         });
         _core = new SingleQueueSenderCore(channel);
     }
     else
     {
         _core = new SingleQueueSenderCore();
     }
 }
Example #4
0
 public BinaryOnlySender(int capacity)
 {
     if (0 < capacity)
     {
         var channel = Channel.CreateBounded <ArraySegment <byte> >(new BoundedChannelOptions(capacity)
         {
             SingleReader = true, SingleWriter = false
         });
         _core = new BinaryOnlySenderCore(channel);
     }
     else
     {
         _core = new BinaryOnlySenderCore();
     }
 }
        public DoubleQueueSender(int binaryQueueCapacity, int textQueueCapacity)
        {
            Channel <ArraySegment <byte> > binaryMessageQueue = null;
            Channel <ArraySegment <byte> > textMessageQueue   = null;

            if (0 < binaryQueueCapacity)
            {
                binaryMessageQueue = Channel.CreateBounded <ArraySegment <byte> >(new BoundedChannelOptions(binaryQueueCapacity)
                {
                    SingleReader = true, SingleWriter = false
                });
            }

            if (0 < textQueueCapacity)
            {
                textMessageQueue = Channel.CreateBounded <ArraySegment <byte> >(new BoundedChannelOptions(textQueueCapacity)
                {
                    SingleReader = true, SingleWriter = false
                });
            }

            _core = new DoubleQueueSenderCore(binaryMessageQueue, textMessageQueue);
        }
Example #6
0
 public SingleQueueSender(Channel <SentMessage> sentMessageQueue = null)
 {
     _core = new SingleQueueSenderCore(sentMessageQueue);
 }
Example #7
0
 public BinaryOnlySender(Channel <ArraySegment <byte> > sentMessageQueue = null)
 {
     _core = new BinaryOnlySenderCore(sentMessageQueue);
 }
 public DoubleQueueSender(Channel <ArraySegment <byte> > binaryMessageQueue = null, Channel <ArraySegment <byte> > textMessageQueue = null)
 {
     _core = new DoubleQueueSenderCore(binaryMessageQueue, textMessageQueue);
 }