예제 #1
0
    // Start is called before the first frame update
    async void Start()
    {
        webSocket = new WebSocket("wss://1kvhz41590.execute-api.us-west-1.amazonaws.com/production");

        webSocket.OnOpen += () =>
        {
            Debug.Log("Connected!!!");

            InvokeRepeating("SendWebSocketPing", 60f, 60f * pingFrequency);
            GetForeignData();
        };

        webSocket.OnMessage += (bytes) =>
        {
            Debug.Log($"Message: {System.Text.Encoding.UTF8.GetString(bytes)}");
        };

        webSocket.OnMessage += (bytes) =>
        {
            string bytesData = System.Text.Encoding.UTF8.GetString(bytes);

            WebSocketMessage message = JsonUtility.FromJson <WebSocketMessage>(bytesData);

            if (message.type == "foreignWindowData")
            {
                CompleteDataResult foreignWindowData = JsonUtility.FromJson <CompleteDataResult>(bytesData);
                int index = 0;

                foreach (CompleteDataResult.ForeignWindowData foreignWindow in foreignWindowData.data)
                {
                    Debug.Log($"Foreign Apartment ID: {foreignWindow.apartmentId}");

                    foreignWindows[index].AddData(foreignWindow);
                    foreignWindowsMap.Add(foreignWindow.apartmentId, foreignWindows[index]);

                    index++;
                }
            }
            else if (message.type == "addStickyNote")
            {
                QuestDebug.Instance.Log("Getting new sticky info");
                AddStickyNoteResult stickyNoteData = JsonUtility.FromJson <AddStickyNoteResult>(bytesData);

                if (foreignWindowsMap.ContainsKey(stickyNoteData.apartmentId))
                {
                    foreignWindowsMap[stickyNoteData.apartmentId].AddStickyNoteFromData(stickyNoteData.data);
                }
            }
            else if (message.type == "removeStickyNote")
            {
                QuestDebug.Instance.Log("Removing foreign sticky note");
                RemoveStickyNoteResult removeStickyNoteData = JsonUtility.FromJson <RemoveStickyNoteResult>(bytesData);

                if (foreignWindowsMap.ContainsKey(removeStickyNoteData.apartmentId))
                {
                    foreignWindowsMap[removeStickyNoteData.apartmentId].RemoveStickyNoteFromData(removeStickyNoteData.stickyNoteId);
                }
            }
            else if (message.type == "localWindowData")
            {
                Debug.Log("Got local window data");
                LocalWindowResult localWindowResult = JsonUtility.FromJson <LocalWindowResult>(bytesData);
                Debug.Log(localWindowResult.data);

                if (localWindowResult.data != null)
                {
                    localWindow.AddData(localWindowResult.data);
                }
            }
            else if (message.type == "setOnlineStatus")
            {
                SetOnlineResult setOnlineResult = JsonUtility.FromJson <SetOnlineResult>(bytesData);
                Debug.Log($"Setting online to: {setOnlineResult.onlineStatus} of apartment {setOnlineResult.apartmentId}");

                if (foreignWindowsMap.ContainsKey(setOnlineResult.apartmentId))
                {
                    foreignWindowsMap[setOnlineResult.apartmentId].SetOnlineStatus(setOnlineResult.onlineStatus);
                }
            }
        };

        await webSocket.Connect();
    }