public void BasicRoundTrip()
		{
			var serializer = new JsonCommonSerializer();

			var port = new Random().Next(6000, 60000);

			var listener = new WebSocketServer("ws://localhost:" + port);
			var serverTransport = listener.GenerateTransportSource("/p1");
			var serverRouter = new DefaultMessageRouter(serverTransport, serializer);
			serverRouter.AddService<IMyService>(new MyService());
			listener.Start();

			var client = new WebSocket("ws://localhost:" + port + "/p1");
			var clientTransport = client.GenerateTransportSource();
			var clientRouter = new DefaultMessageRouter(clientTransport, serializer);
			var proxy = clientRouter.AddInterface<IMyService>();
			client.Connect();

			var result = proxy.Add(3, 4).Result;
			Assert.Equal(7, result);

			clientRouter.Dispose();
			clientTransport.Dispose();
			client.Close();

			serverRouter.Dispose();
			serverTransport.Dispose();
			listener.Stop();
		}
示例#2
0
 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     captureDevice?.Close();
     captureDevice = null;
     playerWindow?.Close();
     testLogger?.Close();
     networkListener?.Close();
 }
示例#3
0
        /// <inheritdoc/>
        public void Disconnect()
        {
            if (client == null || !client.IsAlive)
            {
                Console.WriteLine("The client wasn't connected, disctonnect asked but not needed.");
            }

            Console.WriteLine($"Disconnecting the client for {client.Url}.");
            client?.Close();
        }
示例#4
0
        public void Dispose()
        {
            _disposed = true;

            websocket?.Close();
            websocket = null;

            http?.Dispose();
            http = null;
        }
示例#5
0
 public void Close()
 {
     _webSocket.Close();
 }
示例#6
0
 public void Close()
 {
     m_Socket.Close();
 }
		public void Benchmark()
		{
			var serializerSource = new Newtonsoft.Json.JsonSerializer();
			var serializer =new JsonCommonSerializer(serializerSource); // new ProtobufCommonSerializer();//

			var port = new Random().Next(6000, 60000);

			var listener = new WebSocketServer("ws://localhost:" + port);
			var serverTransport = listener.GenerateTransportSource("/p1");
			var serverRouter = new DefaultMessageRouter(serverTransport, serializer);
			serverRouter.AddService<ISumService>(new SumService());
			listener.Start();

			var client = new WebSocket("ws://localhost:" + port + "/p1");
			//client.Compression = WebSocketSharp.CompressionMethod.Deflate;
			var clientTransport = client.GenerateTransportSource();
			var clientRouter = new DefaultMessageRouter(clientTransport, serializer);
			var proxy = clientRouter.AddInterface<ISumService>();
			client.Connect();

			const int randCnt = 100;
			var rand = new Random(42);
			var randoms = new int[randCnt];
			for (int i = 0; i < randCnt; i++) randoms[i] = rand.Next(10000000, 20000000);
			var package = new SumPackage { Numbers = randoms };

			var sw = new Stopwatch();
			long timeFromClient = 0, timeToClient = 0;
			const int cnt = 1000;
			for (int j = 0; j < cnt; j++)
			{
				sw.Start();
				//var sum = proxy.Sum(randoms).Result;
				var sum = proxy.SumPackage(package).Result;
				sw.Stop();
				Assert.Equal(randoms.Sum(), sum);
				for (int i = 0; i < randCnt; i++) randoms[i] = rand.Next(10000000, 20000000);
				var times = proxy.TimeDiff(Stopwatch.GetTimestamp()).Result;
				timeFromClient += times.Item1;
				timeToClient += Stopwatch.GetTimestamp() - times.Item2;
			}

			_testOutputHelper.WriteLine("Completed {0} sum passes in {1}ms", cnt, sw.ElapsedMilliseconds);
			_testOutputHelper.WriteLine("Client to server latency: {0}us", timeFromClient / cnt / 10);
			_testOutputHelper.WriteLine("Server to client latency: {0}us", timeToClient / cnt / 10);

			sw.Reset();
			var tree = new SumServiceTree();
			SumServiceTree.FillTree(tree, rand, 2);
			_testOutputHelper.WriteLine("Starting large message transfer.");
			sw.Start();
			var result = proxy.Increment(tree).Result;
			sw.Stop();
			Assert.Equal(tree.Leaf + 1, result.Leaf);
			_testOutputHelper.WriteLine("Completed large transfer in {0}ms", sw.Elapsed.TotalMilliseconds);

			clientRouter.Dispose();
			clientTransport.Dispose();
			client.Close();

			serverRouter.Dispose();
			serverTransport.Dispose();
			listener.Stop();
		}
示例#8
0
        public void LoopListening(ref bool StopListenToken)
        {
            // Get Room ID.
            var txt  = HttpRequests.DownloadString(@"https://api.live.bilibili.com/room/v1/Room/room_init?id=" + LiveRoomID).Result;
            var jobj = JToken.Parse(txt);
            var id   = jobj["data"]["room_id"].ToObject <int>();

            // Get Room token.
            txt  = HttpRequests.DownloadString(@"https://api.live.bilibili.com/room/v1/Danmu/getConf?room_id=" + LiveRoomID).Result;
            jobj = JToken.Parse(txt);
            var token = jobj["data"]["token"].ToString();

            using (var ws = new WebSocketSharp.WebSocket("wss://broadcastlv.chat.bilibili.com/sub"))
            {
                State = ListenerState.Connecting;
                ws.Connect();

                // Initialize
                var package = PackageBuilder.MakeAuthPackage(0, id, token);
                Trace.TraceWarning($"BilibiliListener: Connecting:{id}...");
                ws.OnMessage += Ws_OnMessage;
                var bytes = package.ToByteArray();
                ws.Send(bytes);

                // When the connection is not bad, default action.
                // Reconnect to the live room and resend the auto package.
                OnBadCommunication += c =>
                {
                    c.Close();
                    Thread.Sleep(1000);
                    c.Connect();
                    var counter = 3;
                    while (counter-- > 0)
                    {
                        if (c.ReadyState == WebSocketSharp.WebSocketState.Open)
                        {
                            var p = PackageBuilder.MakeAuthPackage(0, id, token);
                            c.Send(p.ToByteArray());
                            LastSendHeartBeatTime = DateTime.Now;
                            State = ListenerState.Connected;
                            Trace.TraceWarning("BilibiliListener: Reconnected.");
                            return;
                        }
                        else
                        {
                            Trace.TraceWarning("BilibiliListener: Retry after 3 seconds.");
                            Thread.Sleep(3000);
                        }
                    }
                };

                // Main loop
                while (!StopListenToken)
                {
                    Thread.Sleep(1000);
                    if (ws.ReadyState == WebSocketSharp.WebSocketState.Open && DateTime.Now.Subtract(LastSendHeartBeatTime).TotalMilliseconds >= HeartBeatDuration)
                    {
                        var heartbeat = PackageBuilder.MakeHeatBeat();
                        ws.Send(heartbeat.ToByteArray());
                        LastSendHeartBeatTime = DateTime.Now;
                        waitBack = true;
                    }
                    if (waitBack && DateTime.Now.Subtract(LastSendHeartBeatTime).TotalMilliseconds >= HeartBeatTimeout)
                    {
                        State = ListenerState.BadCommunication;
                        Trace.TraceWarning("BilibiliListener: Bad communication, retrying.");
                        OnBadCommunication?.Invoke(ws);
                    }
                }

                ws.Close();
                State = ListenerState.Disconnected;
            }
        }
        public async Task TestHttp302Redirect()
        {
            var          originData          = Encoding.UTF8.GetBytes("Hello World");
            const string serverOrigin        = "localhost:54399";
            string       serverOriginAddress = $"http://{serverOrigin}";
            const string serverReal          = "localhost:54400";
            string       serverRealAddress   = $"http://{serverReal}";
            string       clientOriginAddress = $"ws://{serverOrigin}/ws";
            string       clientRealAddress   = $"ws://{serverReal}/ws_new";

            var serverTestComplte = false;

            var configForOrigin = NetCoreWebSocketHelper.CreateConfigWithUrl(serverOriginAddress);
            var configForReal   = NetCoreWebSocketHelper.CreateConfigWithUrl(serverRealAddress);

            var originServerAction = new Func <HttpContext, Task>(async context =>
            {
                if (context.Request.Path == "/ws")
                {
                    Assert.True(context.WebSockets.IsWebSocketRequest);
                    context.Response.Redirect(clientRealAddress);
                }
            });

            var realServerAction = new Func <HttpContext, Task>(async context =>
            {
                if (context.Request.Path == "/ws_new")
                {
                    Assert.True(context.WebSockets.IsWebSocketRequest);
                    var webSocket = await context.WebSockets.AcceptWebSocketAsync().OrTimeout();

                    var serverBuffer  = new byte[originData.Length];
                    var receiveResult =
                        await webSocket.ReceiveAsync(new ArraySegment <byte>(serverBuffer), CancellationToken.None)
                        .OrTimeout();

                    while (!receiveResult.CloseStatus.HasValue)
                    {
                        //Assert
                        Assert.True(receiveResult.EndOfMessage);
                        Assert.Equal(originData.Length, receiveResult.Count);
                        Assert.Equal(WebSocketMessageType.Binary, receiveResult.MessageType);
                        Assert.Equal(originData, serverBuffer);

                        receiveResult =
                            await webSocket.ReceiveAsync(new ArraySegment <byte>(serverBuffer),
                                                         CancellationToken.None).OrTimeout();
                    }

                    await webSocket.CloseAsync(receiveResult.CloseStatus.Value, receiveResult.CloseStatusDescription,
                                               CancellationToken.None).OrTimeout();
                    serverTestComplte = true;
                }
            });

            //Act
            using (IWebHost originServer =
                       NetCoreWebSocketHelper.CreateTestServer(configForOrigin, _testOutputHelper, originServerAction),
                   realServer =
                       NetCoreWebSocketHelper.CreateTestServer(configForReal, _testOutputHelper, realServerAction))
            {
                await originServer.StartAsync().OrTimeout();

                await realServer.StartAsync().OrTimeout();

                using (var ws = new WebSocketSharp.WebSocket(clientOriginAddress, CreateWebSocketLogger()))
                {
                    ws.EnableRedirection = true;
                    ws.Connect();
                    Assert.Equal(clientRealAddress, ws.Url.OriginalString);
                    ws.Send(originData);
                    ws.Close();
                }
            }

            Assert.True(serverTestComplte, "server assertion fail");
        }
示例#10
0
 public override void Close()
 {
     _socket.Close();
 }
示例#11
0
		public void WebSocketSharpRoundTrip()
		{
			var serializer = new JsonCommonSerializer();

			var port = new Random().Next(20000, 60000);

			var server = WebApp.Start<Startup>("http://localhost:" + port + "/");

			var client = new WebSocketSharp.WebSocket("ws://localhost:" + port + "/rt1");
			var clientTransport = client.GenerateTransportSource();
			var clientRouter = new DefaultMessageRouter(clientTransport, serializer);
			var proxy = clientRouter.AddInterface<IMyService>();
			client.Connect();

			var result = proxy.Add(3, 4).Result;
			Assert.Equal(7, result);

			clientRouter.Dispose();
			clientTransport.Dispose();
			client.Close();

			server.Dispose();
		}
示例#12
0
 /// <summary>
 /// Called when the service stops
 /// </summary>
 /// <returns></returns>
 public bool Stop()
 {
     webSocket.Close();
     return(true);
 }
示例#13
0
        public void BenchmarkMessagesWebSocketSharp()
        {
            var serializer = new JsonCommonSerializer();             // new ProtobufCommonSerializer(); //
            var port       = new Random().Next(20000, 60000);

            var url    = "http://localhost:" + port + "/";
            var server = WebApp.Start <Startup>(url);

            var client          = new WebSocketSharp.WebSocket("ws://localhost:" + port + "/rt1");
            var clientTransport = client.GenerateTransportSource();
            var clientRouter    = new DefaultMessageRouter(clientTransport, serializer);
            var proxy           = clientRouter.AddInterface <ISumService>();

            client.Connect();

            const int randCnt = 100;
            var       rand    = new Random(42);
            var       randoms = new int[randCnt];

            for (int i = 0; i < randCnt; i++)
            {
                randoms[i] = rand.Next(10000000, 20000000);
            }

            var       sw = new Stopwatch();
            long      timeFromClient = 0, timeToClient = 0;
            const int cnt = 1000;

            for (int j = 0; j < cnt; j++)
            {
                sw.Start();
                var sum = proxy.Sum(randoms).Result;
                sw.Stop();
                Assert.Equal(randoms.Sum(), sum);
                for (int i = 0; i < randCnt; i++)
                {
                    randoms[i] = rand.Next(10000000, 20000000);
                }
                var times = proxy.TimeDiff(Stopwatch.GetTimestamp()).Result;
                timeFromClient += times.Item1;
                timeToClient   += Stopwatch.GetTimestamp() - times.Item2;
            }

            _testOutputHelper.WriteLine("Completed {0} sum passes in {1}ms", cnt, sw.ElapsedMilliseconds);
            _testOutputHelper.WriteLine("Client to server latency: {0}us", timeFromClient / cnt / 10);
            _testOutputHelper.WriteLine("Server to client latency: {0}us", timeToClient / cnt / 10);

            sw.Reset();
            var tree = new SumServiceTree();

            SumServiceTree.FillTree(tree, rand, 2);
            _testOutputHelper.WriteLine("Starting large message transfer.");
            sw.Start();
            var result = proxy.Increment(tree).Result;

            sw.Stop();
            Assert.Equal(tree.Leaf + 1, result.Leaf);
            _testOutputHelper.WriteLine("Completed large transfer in {0}ms", sw.Elapsed.TotalMilliseconds);

            client.Close();
            server.Dispose();
        }
示例#14
0
 public void Close()
 {
     _webSocket.Close();
     _webSocket.Dispose();
 }
 void OnApplicationQuit()
 {
     //Trying to close twitch connection.
     ws.Close();
 }
示例#16
0
 public void Close()
 {
     _socket.Close();
 }
 void CloseInternal()
 {
     _webSocket.Close();
 }
示例#18
0
 public void Stop()
 {
     ws.Close();
 }