Skip to content

Commit d6fe844

Browse files
authored
Merge pull request #1 from Iblis/pull-receive-methods-to-iwebsocket
pulled Receive and Send-Methods to IWebSocket interface for easier use
2 parents 3a54e4a + 90aaf45 commit d6fe844

4 files changed

Lines changed: 30 additions & 18 deletions

File tree

Runtime/IWebSocket.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,11 @@ public interface IWebSocket : IDisposable
1212
UniTask ConnectAsync(string uri, CancellationToken cancellationToken);
1313

1414
UniTask CloseAsync(WebSocketCloseStatus closeCode, string reason, CancellationToken cancellationToken);
15+
16+
UniTask<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken);
17+
18+
UniTask SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken token);
19+
20+
UniTask SendText(string message, CancellationToken token);
1521
}
1622
}

Runtime/WebGLWebSocket.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public UniTask SendAsync(ArraySegment<byte> buffer, WebSocketMessageType message
6969
{
7070
if (messageType == WebSocketMessageType.Text)
7171
{
72-
SendText(System.Text.Encoding.UTF8.GetString(buffer.Array));
72+
SendText(System.Text.Encoding.UTF8.GetString(buffer.Array), token);
7373
}
7474
else
7575
{
@@ -80,7 +80,7 @@ public UniTask SendAsync(ArraySegment<byte> buffer, WebSocketMessageType message
8080
return UniTask.CompletedTask;
8181
}
8282

83-
public UniTask SendText(string message)
83+
public UniTask SendText(string message, CancellationToken token)
8484
{
8585
int ret = WebSocketSendText(instanceId, message);
8686

@@ -103,21 +103,10 @@ public async UniTask<WebSocketReceiveResult> ReceiveAsync(Memory<byte> buffer, C
103103
}
104104
}
105105

106-
// TODO: allow using modern data types if runtime allows it
107-
/*public async UniTask<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken token)
106+
public async UniTask<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken)
108107
{
109-
try
110-
{
111-
WebSocketMessage message = await receivedQueue.Reader.ReadAsync();
112-
Debug.Log($"Message Received with bytes: {message.Result.Count}");
113-
message.MoveDataTo(buffer.AsMemory());
114-
return message.Result;
115-
}
116-
catch (ChannelClosedException)
117-
{
118-
throw new EndOfStreamException();
119-
}
120-
}*/
108+
return await ReceiveAsync(buffer.AsMemory(), cancellationToken);
109+
}
121110

122111
readonly int instanceId;
123112
readonly Channel<WebSocketMessage> receivedQueue = Channel.CreateSingleConsumerUnbounded<WebSocketMessage>();

Runtime/WebSocketWrapper.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Cysharp.Threading.Tasks;
22
using System;
33
using System.Net.WebSockets;
4+
using System.Text;
45
using System.Threading;
56

67
namespace UniTaskWebSocket
@@ -30,7 +31,23 @@ public async UniTask CloseAsync(WebSocketCloseStatus closeCode, string reason, C
3031
return;
3132
}
3233
await Socket.CloseAsync(closeCode, reason, cancellationToken);
33-
}
34+
}
35+
36+
public async UniTask<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken)
37+
{
38+
return await Socket.ReceiveAsync(buffer, cancellationToken);
39+
}
40+
41+
public async UniTask SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken token)
42+
{
43+
await Socket.SendAsync(buffer, messageType, endOfMessage, token);
44+
}
45+
46+
public async UniTask SendText(string message, CancellationToken token)
47+
{
48+
var dataToSend = new ArraySegment<byte>(Encoding.UTF8.GetBytes(message));
49+
await Socket.SendAsync(dataToSend, WebSocketMessageType.Text, true, token);
50+
}
3451

3552
public void Dispose()
3653
{

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "com.pwalser.unitaskwebsocket",
33
"displayName": "UniTaskWebSocket",
4-
"version": "0.1.0",
4+
"version": "0.2.0",
55
"unity": "2021.2",
66
"description": "Wraps a WebSocket (System.Net.WebSockets and jslib-bridged WebSocket) in an Interface that returns UniTask, allows async/await WebSocket operations in Unity",
77
"keywords": [

0 commit comments

Comments
 (0)