Skip to content

Commit 260b7cc

Browse files
committed
OnDisconnected
1 parent 33a80a1 commit 260b7cc

File tree

5 files changed

+74
-86
lines changed

5 files changed

+74
-86
lines changed

src/SocketIOClient.Sample/Program.cs

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ class Program
1111
{
1212
static async Task Main(string[] args)
1313
{
14-
Console.OutputEncoding = Encoding.UTF8;
15-
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
14+
//Console.OutputEncoding = Encoding.UTF8;
15+
//Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
1616

1717
var uri = new Uri("http://localhost:11003/");
1818

@@ -24,21 +24,6 @@ static async Task Main(string[] args)
2424
}
2525
});
2626

27-
28-
//var client = socket.Socket as ClientWebSocket;
29-
//client.Config = options =>
30-
//{
31-
// options.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
32-
// {
33-
// Console.WriteLine("SslPolicyErrors: " + sslPolicyErrors);
34-
// if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
35-
// {
36-
// return true;
37-
// }
38-
// return false;
39-
// };
40-
//};
41-
4227
socket.OnConnected += Socket_OnConnected;
4328
socket.OnPing += Socket_OnPing;
4429
socket.OnPong += Socket_OnPong;
@@ -51,28 +36,15 @@ static async Task Main(string[] args)
5136
});
5237
socket.On("hi", response =>
5338
{
39+
// Console.WriteLine(response.ToString());
5440
Console.WriteLine(response.GetValue<string>());
5541
});
56-
socket.On("1 params", response =>
57-
{
58-
var bytes = response.GetValue<byte[]>();
59-
Console.WriteLine(Encoding.UTF8.GetString(bytes));
60-
});
61-
socket.On("client calls the server's callback 1", async response =>
62-
{
63-
byte[] bytes = response.GetValue<byte[]>();
64-
string text = Encoding.UTF8.GetString(bytes) + "...";
65-
await response.CallbackAsync(Encoding.UTF8.GetBytes(text));
66-
Console.WriteLine("vv");
67-
});
6842

6943
//Console.WriteLine("Press any key to continue");
7044
//Console.ReadLine();
7145

7246
await socket.ConnectAsync();
7347

74-
//socket.ConnectedObservable.Subscribe(_ => Console.WriteLine("ConnectedObservable"));
75-
7648
Console.ReadLine();
7749
}
7850

@@ -92,11 +64,11 @@ private static async void Socket_OnConnected(object sender, EventArgs e)
9264
var socket = sender as SocketIO;
9365
Console.WriteLine("Socket.Id:" + socket.Id);
9466

95-
while (true)
96-
{
97-
await Task.Delay(1000);
98-
await socket.EmitAsync("hi", "SocketIOClient.Sample");
99-
}
67+
//while (true)
68+
//{
69+
// await Task.Delay(1000);
70+
await socket.EmitAsync("hi", DateTime.Now.ToShortDateString());
71+
//}
10072
//byte[] bytes = Encoding.UTF8.GetBytes("ClientCallsServerCallback_1Params_0");
10173
//await socket.EmitAsync("client calls the server's callback 1", bytes);
10274
//await socket.EmitAsync("1 params", Encoding.UTF8.GetBytes("hello world"));

src/SocketIOClient/SocketIO.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ private void CreateRouterIfNull()
181181
Router.QueryParams = kvs;
182182
}
183183
Router.OnMessageReceived = OnMessageReceived;
184+
Router.OnTransportClosed = OnTransportClosed;
184185
}
185186
}
186187

@@ -203,9 +204,9 @@ public async Task ConnectAsync()
203204
await Router.ConnectAsync().ConfigureAwait(false);
204205
break;
205206
}
206-
catch (SystemException e)
207+
catch (Exception e)
207208
{
208-
if (e is TimeoutException || e is WebSocketException)
209+
if (e is TimeoutException || e is WebSocketException || e is HttpRequestException)
209210
{
210211
if (!Options.Reconnection)
211212
{
@@ -410,6 +411,11 @@ private void OnMessageReceived(IMessage msg)
410411
}
411412
}
412413

414+
private void OnTransportClosed()
415+
{
416+
InvokeDisconnect(DisconnectReason.TransportClose);
417+
}
418+
413419
public async Task DisconnectAsync()
414420
{
415421
if (Connected)

src/SocketIOClient/Transport/HttpTransport.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ public HttpTransport(HttpClient httpClient)
2121

2222
string AppendRandom(string uri)
2323
{
24-
//return uri + "&t=" + Guid.NewGuid().ToString();
2524
return uri + "&t=" + DateTimeOffset.Now.ToUnixTimeSeconds();
2625
}
2726

@@ -35,7 +34,6 @@ public async Task GetAsync(string uri, CancellationToken cancellationToken)
3534
}
3635
string text = await resMsg.Content.ReadAsStringAsync().ConfigureAwait(false);
3736
Produce(text);
38-
//return await resMsg.Content.ReadAsStringAsync().ConfigureAwait(false);
3937
}
4038

4139
public async Task PostAsync(string uri, string content, CancellationToken cancellationToken)

src/SocketIOClient/Transport/TransportRouter.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ public TransportRouter(HttpClient httpClient, Func<IClientWebSocket> clientWebSo
5353

5454
public Action<IMessage> OnMessageReceived { get; set; }
5555

56+
public Action OnTransportClosed { get; set; }
57+
5658
public async Task ConnectAsync()
5759
{
5860
if (_webSocketTransport != null)
@@ -87,6 +89,7 @@ private async Task WebSocketConnectAsync()
8789
await _webSocketTransport.ConnectAsync(uri).ConfigureAwait(false);
8890
_webSocketTransport.OnTextReceived = OnWebSocketTextReceived;
8991
_webSocketTransport.OnBinaryReceived = OnBinaryReceived;
92+
_webSocketTransport.OnAborted = OnAborted;
9093
await _webSocketTransport.SendAsync("2probe", CancellationToken.None);
9194
}
9295

@@ -96,6 +99,7 @@ private async Task HttpConnectAsync()
9699
_pingToken = _pingTokenSource.Token;
97100
_httpTransport.OnTextReceived = OnTextReceived;
98101
_httpTransport.OnBinaryReceived = OnBinaryReceived;
102+
99103
StartPolling();
100104
var msg = new ConnectedMessage
101105
{
@@ -110,9 +114,15 @@ private void StartPolling()
110114
{
111115
while (!_pingToken.IsCancellationRequested)
112116
{
113-
await _httpTransport.GetAsync(_httpUri, CancellationToken.None).ConfigureAwait(false);
114-
//Debug.WriteLine("Polling Result:" + text);
115-
//_httpTransport.Produce(text);
117+
try
118+
{
119+
await _httpTransport.GetAsync(_httpUri, CancellationToken.None).ConfigureAwait(false);
120+
}
121+
catch
122+
{
123+
OnTransportClosed();
124+
throw;
125+
}
116126
}
117127
}, TaskCreationOptions.LongRunning);
118128
}
@@ -168,6 +178,11 @@ private void OnBinaryReceived(byte[] bytes)
168178
}
169179
}
170180

181+
private void OnAborted(Exception e)
182+
{
183+
OnTransportClosed();
184+
}
185+
171186
public async Task SendAsync(IMessage msg, CancellationToken cancellationToken)
172187
{
173188
string text = msg.Write();

src/SocketIOClient/Transport/WebSocketTransport.cs

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public WebSocketTransport(IClientWebSocket ws)
2525
public TimeSpan ReceiveWait { get; set; }
2626
public Action<string> OnTextReceived { get; set; }
2727
public Action<byte[]> OnBinaryReceived { get; set; }
28+
public Action<Exception> OnAborted { get; set; }
2829

2930
readonly IClientWebSocket _ws;
3031
readonly CancellationTokenSource _listenCancellation;
@@ -91,61 +92,57 @@ private async Task ListenAsync()
9192
{
9293
break;
9394
}
94-
if (_ws.State == WebSocketState.Open)
95-
{
96-
var buffer = new byte[ReceiveChunkSize];
97-
int count = 0;
98-
WebSocketReceiveResult result = null;
95+
var buffer = new byte[ReceiveChunkSize];
96+
int count = 0;
97+
WebSocketReceiveResult result = null;
9998

100-
while (true)
99+
while (_ws.State == WebSocketState.Open)
100+
{
101+
var subBuffer = new byte[ReceiveChunkSize];
102+
try
101103
{
102-
var subBuffer = new byte[ReceiveChunkSize];
103-
try
104-
{
105-
result = await _ws.ReceiveAsync(new ArraySegment<byte>(subBuffer), CancellationToken.None).ConfigureAwait(false);
104+
result = await _ws.ReceiveAsync(new ArraySegment<byte>(subBuffer), CancellationToken.None).ConfigureAwait(false);
106105

107-
// resize
108-
if (buffer.Length - count < result.Count)
109-
{
110-
Array.Resize(ref buffer, buffer.Length + result.Count);
111-
}
112-
Buffer.BlockCopy(subBuffer, 0, buffer, count, result.Count);
113-
count += result.Count;
114-
if (result.EndOfMessage)
115-
{
116-
break;
117-
}
106+
// resize
107+
if (buffer.Length - count < result.Count)
108+
{
109+
Array.Resize(ref buffer, buffer.Length + result.Count);
118110
}
119-
catch (Exception e)
111+
Buffer.BlockCopy(subBuffer, 0, buffer, count, result.Count);
112+
count += result.Count;
113+
if (result.EndOfMessage)
120114
{
121-
Debug.WriteLine(e);
122115
break;
123116
}
124117
}
125-
126-
if (result != null)
118+
catch (Exception e)
127119
{
128-
switch (result.MessageType)
129-
{
130-
case WebSocketMessageType.Text:
131-
string text = Encoding.UTF8.GetString(buffer, 0, count);
132-
OnTextReceived(text);
133-
break;
134-
case WebSocketMessageType.Binary:
135-
byte[] bytes = new byte[count];
136-
Buffer.BlockCopy(buffer, 0, bytes, 0, bytes.Length);
137-
OnBinaryReceived(bytes);
138-
break;
139-
case WebSocketMessageType.Close:
140-
break;
141-
default:
142-
break;
143-
}
120+
Debug.WriteLine(e);
121+
OnAborted(e);
122+
break;
144123
}
145124
}
146-
else
125+
126+
if (result == null)
127+
{
128+
break;
129+
}
130+
131+
switch (result.MessageType)
147132
{
148-
await Task.Delay(ReceiveWait);
133+
case WebSocketMessageType.Text:
134+
string text = Encoding.UTF8.GetString(buffer, 0, count);
135+
OnTextReceived(text);
136+
break;
137+
case WebSocketMessageType.Binary:
138+
byte[] bytes = new byte[count];
139+
Buffer.BlockCopy(buffer, 0, bytes, 0, bytes.Length);
140+
OnBinaryReceived(bytes);
141+
break;
142+
case WebSocketMessageType.Close:
143+
break;
144+
default:
145+
break;
149146
}
150147
}
151148
}

0 commit comments

Comments
 (0)