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(); }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { captureDevice?.Close(); captureDevice = null; playerWindow?.Close(); testLogger?.Close(); networkListener?.Close(); }
/// <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(); }
public void Dispose() { _disposed = true; websocket?.Close(); websocket = null; http?.Dispose(); http = null; }
public void Close() { _webSocket.Close(); }
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(); }
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"); }
public override void Close() { _socket.Close(); }
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(); }
/// <summary> /// Called when the service stops /// </summary> /// <returns></returns> public bool Stop() { webSocket.Close(); return(true); }
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(); }
public void Close() { _webSocket.Close(); _webSocket.Dispose(); }
void OnApplicationQuit() { //Trying to close twitch connection. ws.Close(); }
public void Close() { _socket.Close(); }
void CloseInternal() { _webSocket.Close(); }
public void Stop() { ws.Close(); }