Connect() is not the same on WebGL as on other builds

オープン
#22 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
csharp, unity
領域
networking

調査の方向性

まず Connect() の WebGL 実装と OnOpen コールバックを追跡し、その後、そのフローを非 WebGL ビルドと比較します。await websocket.Connect() がソケットを使用可能になる前に完了せず、その後の SendText("hello") 呼び出しが State をポーリングせずに動作すれば完了です。

索引モデルが issue の本文から書いたものです。

説明

I'm not sure if this is by design, or an issue, but on non-WebGL builds, await websocket.Connect() will return when the socket is open (or failed, I suppose).

On WebGL however, as Connect() returns Task.CompletedTask immediately, this isn't the case, and if you have this in a "synchronous" context, the socket isn't actually available. You need to loop and wait until OnOpen is called.

So this code:

await websocket.Connect();
await websocket.SendText("hello");

doesn't work on WebGL. You need to do something like:

await websocket.Connect();

// await wrapper around coroutine call with something like Unity3dAsyncAwaitUtil
await new WaitUntil( () => websocket.State == WebSocketState.Open );

await websocket.SendText("hello");
主要言語
C#
スター
1.7k
フォーク
206
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

endel/NativeWebSocket のほかの issue

endel/NativeWebSocket の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。