コード例 #1
0
            public async Task WhenStreamVeryLargeStreamToServerThenBroadcasts([Random(750000, 1500000, 5)] int length)
            {
                var responseLength = 0;

                var stream     = new EnumerableStream(Enumerable.Repeat((byte)123, length));
                var waitHandle = new ManualResetEventSlim(false);

                Func <MessageEventArgs, Task> onMessage = async e =>
                {
                    var bytes = await e.Data.ReadBytes(length).ConfigureAwait(false);

                    responseLength = bytes.Count(x => x == 123);
                    waitHandle.Set();
                };

                using (var sender = new WebSocket(WsLocalhostRadio))
                {
                    SetCredentials(sender);
                    using (var client = new WebSocket(WsLocalhostRadio, onMessage: onMessage))
                    {
                        SetCredentials(client);

                        await sender.Connect().ConfigureAwait(false);

                        await client.Connect().ConfigureAwait(false);

                        await sender.Send(stream).ConfigureAwait(false);

                        waitHandle.Wait();

                        Assert.AreEqual(length, responseLength);
                    }
                }
            }
コード例 #2
0
            public async Task WhenStreamVeryLargeStreamToServerThenBroadcasts()
            {
                var       responseLength = 0;
                const int Length         = 1000000;

                var stream     = new EnumerableStream(Enumerable.Repeat((byte)123, Length));
                var waitHandle = new ManualResetEventSlim(false);

                var clientSslConfiguration = new ClientSslConfiguration("localhost", certificateValidationCallback: (sender, certificate, chain, errors) => true);

                Func <MessageEventArgs, Task> onMessage = async e =>
                {
                    var bytes = await e.Data.ReadBytes(Length).ConfigureAwait(false);

                    responseLength = bytes.Count(x => x == 123);

                    waitHandle.Set();
                };

                using (var sender = new WebSocket("wss://localhost:443/radio", sslAuthConfiguration: clientSslConfiguration))
                {
                    using (var client = new WebSocket("wss://localhost:443/radio", sslAuthConfiguration: clientSslConfiguration, onMessage: onMessage))
                    {
                        await sender.Connect().ConfigureAwait(false);

                        await client.Connect().ConfigureAwait(false);

                        await sender.Send(stream).ConfigureAwait(false);

                        waitHandle.Wait();

                        Assert.AreEqual(Length, responseLength);
                    }
                }
            }
コード例 #3
0
            public async Task WhenStreamVeryLargeStreamToServerThenResponds([Random(750000, 1500000, 5)] int length)
            {
                var responseLength = 0;

                var stream     = new EnumerableStream(Enumerable.Repeat((byte)123, length));
                var waitHandle = new ManualResetEventSlim(false);
                Func <MessageEventArgs, Task> onMessage = async e =>
                {
                    var bytesRead  = 0;
                    var readLength = 10240000;
                    do
                    {
                        var buffer = new byte[readLength];
                        bytesRead = await e.Data.ReadAsync(buffer, 0, readLength).ConfigureAwait(false);

                        responseLength += buffer.Count(x => x == 123);
                    }while (bytesRead == readLength);

                    waitHandle.Set();
                };

                using (var client = new WebSocket(WsLocalhostEcho, onMessage: onMessage))
                {
                    SetCredentials(client);

                    await client.Connect().ConfigureAwait(false);

                    await client.Send(stream).ConfigureAwait(false);

                    var result = waitHandle.Wait(Debugger.IsAttached ? -1 : 20000);

                    Assert.AreEqual(length, responseLength);
                }
            }