こういうデータが送られてきて
{"request":"wait","requestID":5934938,"roomID":33149990} public class JsonData { public string request; public int requestID; public int roomID; public string data; }
private int roomID; private int requestID; private string roomStatus; public Text messageText; public Text requestidtx; public Text roomidtx; public Text roomStatusTx;
を更新する
ws.OnMessage += (object sender, MessageEventArgs e) => { Debug.Log("receive: " + e.Data); JsonData data = JsonUtility.FromJson<JsonData>(e.Data); if (data.request == "wait") { if (data.requestID == requestID) { Debug.Log("wait"); roomStatus = "wait"; roomStatusTx.text = roomStatus; changeRoomID(data.roomID); } ・ ・ ・ public void clear() { JsonData data = new JsonData(); data.request = "databaseclear"; changeRoomID(-1); changeRequestID(-1); roomStatus = ""; messageText.text = ""; roomStatusTx.text = ""; Debug.Log("clear" + JsonUtility.ToJson(data)); ws.Send(JsonUtility.ToJson(data)); } public void changeRequestID(int i) { requestID = i; requestidtx.text = i.ToString(); } public void changeRoomID(int i) { roomID = i; Debug.Log(roomID); roomidtx.text = i.ToString(); }
WebSocket Error Message: An error has occurred during an OnMessage event. UnityEngine.Debug:Log(Object) PositionSync:<OnSyncStartButtonDown>b__14_1(Object, ErrorEventArgs) (at Assets/PositionSync.cs:125) WebSocketSharp.Ext:Emit(EventHandler`1, Object, ErrorEventArgs) WebSocketSharp.WebSocket:error(String, Exception) WebSocketSharp.WebSocket:messagec(MessageEventArgs) WebSocketSharp.WebSocket:message() WebSocketSharp.<>c__DisplayClass174_0:<startReceiving>b__1(WebSocketFrame) WebSocketSharp.<>c__DisplayClass83_0:<ReadFrameAsync>b__3(WebSocketFrame) WebSocketSharp.<>c__DisplayClass77_0:<readPayloadDataAsync>b__0(Byte[]) WebSocketSharp.<>c__DisplayClass56_0:<ReadBytesAsync>b__0(IAsyncResult) System.Threading._ThreadPoolWaitCallback:PerformWaitCallback()
clear()での-1の更新はできますが、、、
###追記
if (data.request == "wait") { if (data.requestID == requestID) { Debug.Log("data.request: " + data.request); Debug.Log("data.requestID: " + data.requestID); Debug.Log("data.roomID: " + data.roomID); Debug.Log("data.data: " + data.data); Debug.Log("wait"); roomStatus = "wait"; Debug.Log(roomStatus); Debug.Log(nameof(roomStatus)); roomStatusTx.text = "wait"; Debug.Log(data.roomID); //Debug.Log("request:wait:roomID= " + data.roomID.ToString()); //changeRoomID(data.roomID); }
roomStatusTx.text = "wait";
がおかしいみたいです。
inspectorのTextは"wait"なってますが、scene,game画面は20秒後ぐらいに更新されます。
そのままだとDebug.Log(data.roomID);が表示されませんが、
コメントアウトすると表示されます。
これは大丈夫ですが changeRoomID(-1); changeRequestID(-1); changeRequestID(UnityEngine.Random.Range(0, 9999999)); これはダメでした。 changeRoomID(data.roomID); public void changeRoomID(int i) { roomID = i; Debug.Log(roomID); roomidtx.text = i.ToString(); } これのroomidtx.text = i.ToString(); の部分が多分ダメ見たいです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using WebSocketSharp; using UniRx; using System; using System.Text.RegularExpressions; using System.Linq; [Serializable] public class JsonData { public string request; public int requestID; public int roomID; public string data; } public class PositionSync : MonoBehaviour { [SerializeField] private string _serverAddress; [SerializeField] private int _port; [SerializeField] private Transform _syncObjTransform; //Share transform [SerializeField] private SyncPhase _nowPhase; private WebSocket ws; private int roomID; private int requestID; private string roomStatus; public Text messageText; public Text requestidtx; public Text roomidtx; public Text roomStatusTx; public enum SyncPhase { Idling, Syncing } private void Awake() { _nowPhase = SyncPhase.Idling; } /// <summary> /// Get Down Start Sync Button /// </summary> public void OnSyncStartButtonDown() { //var ca = "ws://" + _serverAddress + ":" + _port.ToString(); var ca = "ws://192.168.33.11:8080"; Debug.Log("Connect to " + ca); ws = new WebSocket(ca); //Add Events //On catch message event ws.OnMessage += (object sender, MessageEventArgs e) => { Debug.Log("receive: " + e.Data); JsonData data = JsonUtility.FromJson<JsonData>(e.Data); // Debug.Log("data.request: " + data.request); // Debug.Log("data.requestID: " + data.requestID); // Debug.Log("data.roomID: " + data.roomID); // Debug.Log("data.data: " + data.data); // Debug.Log(10 + int.Parse(data.roomID)); if (requestID == data.requestID) { //Debug.Log("reserve myrequestID:" + data); } if (data.request == "wait") { if (data.requestID == requestID) { Debug.Log("data.request: " + data.request); Debug.Log("data.requestID: " + data.requestID); Debug.Log("data.roomID: " + data.roomID); Debug.Log("data.data: " + data.data); Debug.Log("wait"); roomStatus = "wait"; Debug.Log(roomStatus); Debug.Log(nameof(roomStatus)); // roomStatusTx.text = roomStatus; Debug.Log(data.roomID); //Debug.Log("request:wait:roomID= " + data.roomID.ToString()); changeRoomID(data.roomID); } } else if (data.request == "connect") { if (requestID == data.requestID) { roomStatus = "connect"; Debug.Log(roomStatus); roomStatusTx.text = roomStatus; changeRoomID(data.roomID); } } else if (data.request == "roomMessage") { if (data.roomID == roomID) { print(data.data); } } }; //On error event ws.OnError += (sender, e) => { Debug.Log("WebSocket Error Message: " + e.Message); _nowPhase = SyncPhase.Idling; }; //On WebSocket close event ws.OnClose += (sender, e) => { Debug.Log("Disconnected Server"); }; ws.Connect(); _nowPhase = SyncPhase.Syncing; } /// <summary> /// Get Down Stop Sync Button /// </summary> public void OnSyncStopButtonDown() { ws.Close(); } } public void intoRoom() { if (_nowPhase == SyncPhase.Syncing && roomStatus != "wait") { JsonData data = new JsonData(); data.request = "RoomRequest"; changeRequestID(UnityEngine.Random.Range(0, 9999999)); data.requestID = requestID; Debug.Log("Sent intoRoom request" + JsonUtility.ToJson(data)); ws.Send(JsonUtility.ToJson(data)); } } public void sentRoomMessage(string message) { JsonData data = new JsonData(); data.request = "roomMessage"; data.roomID = roomID; data.data = message; Debug.Log("Sent intoRoom request" + JsonUtility.ToJson(data)); ws.Send(JsonUtility.ToJson(data)); } public void onPushSentButton() { if (_nowPhase == SyncPhase.Syncing && roomStatus == "connect") { sentRoomMessage(messageText.text); } } public void clear() { JsonData data = new JsonData(); data.request = "databaseclear"; changeRoomID(-1); changeRequestID(-1); roomStatus = ""; messageText.text = ""; roomStatusTx.text = ""; Debug.Log("clear" + JsonUtility.ToJson(data)); ws.Send(JsonUtility.ToJson(data)); } public void changeRequestID(int i) { requestID = i; requestidtx.text = i.ToString(); } public void changeRoomID(int i) { roomID = i; Debug.Log(roomID); roomidtx.text = i.ToString(); } }
うろ覚えなのですが、この書き方の場合ってOnMessageの外で書いた変数をそのまま使えましたっけ?
「Debug.Log(roomidtx);」などとやって正常に通るか確認してみてください。
Debug.Log(roomidtx);はダメでした。
roomStatusTx.text = roomStatus;
roomidtx.text = i.ToString();
テキスト更新は先に書いたほうは一応通って更新されますが、エラーがでて後のは処理されないみたいです。
onmessageのなかで
Text ROOMIDTEXT = GameObject.Find("roomidtx").GetComponent<Text>();
Debug.Log(ROOMIDTEXT);
もダメでした。
自己解決しました。
回答本当にありがとうございました!!!
回答1件
あなたの回答
tips
プレビュー