forked from oising/Nivot.SignalR.Client.Net35
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDefaultWebSocketHandler.cs
More file actions
103 lines (82 loc) · 2.79 KB
/
Copy pathDefaultWebSocketHandler.cs
File metadata and controls
103 lines (82 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocketSharp;
namespace Microsoft.AspNet.SignalR.Client.WebSockets
{
public class DefaultWebSocketHandler : WebSocketHandler, IWebSocket
{
private readonly IWebSocket _webSocket;
private volatile bool _closed;
internal ArraySegment<byte> NextMessageToSend { get; private set; }
public DefaultWebSocketHandler(int? maxIncomingMessageSize)
: base(maxIncomingMessageSize) {
_webSocket = this;
_webSocket.OnClose = () => { };
_webSocket.OnError = e => { };
_webSocket.OnMessage = msg => { };
}
public override void OnClose() {
_closed = true;
_webSocket.OnClose();
}
public override void OnError() {
_webSocket.OnError(Error);
}
public override void OnMessage(string message) {
_webSocket.OnMessage(message);
}
Action<string> IWebSocket.OnMessage {
get;
set;
}
Action IWebSocket.OnClose {
get;
set;
}
Action<Exception> IWebSocket.OnError {
get;
set;
}
Task IWebSocket.Send(IConnection connection, string value) {
return Send(connection, value);
}
public override Task Send(IConnection connection ,string message) {
if (_closed) {
return TaskAsyncHelper.Empty;
}
return base.Send(connection,message);
}
public override Task CloseAsync() {
if (_closed) {
return TaskAsyncHelper.Empty;
}
return base.CloseAsync();
}
public Task SendChunk(ArraySegment<byte> message) {
throw new NotSupportedException();
//if (_closed) {
// return TaskAsyncHelper.Empty;
//}
//if (NextMessageToSend.Count == 0) {
// NextMessageToSend = message;
// return TaskAsyncHelper.Empty;
//} else {
// ArraySegment<byte> messageToSend = NextMessageToSend;
// NextMessageToSend = message;
// return SendAsync(messageToSend, WebSocketMessageType.Text, endOfMessage: false);
//}
}
public Task Flush() {
throw new NotSupportedException();
//if (_closed) {
// return TaskAsyncHelper.Empty;
//}
//var messageToSend = NextMessageToSend;
//NextMessageToSend = new ArraySegment<byte>();
//return SendAsync(messageToSend, WebSocketMessageType.Text, endOfMessage: true);
}
}
}