< Summary

Class:DCL.WSSController
Assembly:WSSController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/Debugging/WSS/WSSController.cs
Covered lines:0
Uncovered lines:233
Coverable lines:233
Total lines:560
Line coverage:0% (0 of 233)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WSSController()0%2100%
WSSController()0%2100%
Awake()0%2100%
Start()0%3061700%
OnDestroy()0%6200%
Update()0%6027024500%
GetBuilderBridge()0%6200%
GetBuilderInWorldBridge()0%6200%
GetHUDBridge()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/Debugging/WSS/WSSController.cs

#LineLine coverage
 1using DCL.Components;
 2using DCL.Interface;
 3using System.Collections.Generic;
 4using DCL.Camera;
 5using UnityEditor;
 6using UnityEngine;
 7using WebSocketSharp;
 8using WebSocketSharp.Server;
 9
 10namespace DCL
 11{
 12    public class DCLWebSocketService : WebSocketBehavior
 13    {
 14        public static bool enterAsAGuest = false; // TODO(Mateo): Refactor https://github.com/decentraland/unity-rendere
 15        static bool VERBOSE = false;
 16
 17        private void SendMessageToWeb(string type, string message)
 18        {
 19#if (UNITY_EDITOR || UNITY_STANDALONE)
 20            var x = new Message()
 21            {
 22                type = type,
 23                payload = message
 24            };
 25            Send(Newtonsoft.Json.JsonConvert.SerializeObject(x));
 26#endif
 27        }
 28
 29        public class Message
 30        {
 31            public string type;
 32            public string payload;
 33
 34            public override string ToString() { return string.Format("type = {0}... payload = {1}...", type, payload); }
 35        }
 36
 37        protected override void OnMessage(MessageEventArgs e)
 38        {
 39            base.OnMessage(e);
 40
 41            lock (WSSController.queuedMessages)
 42            {
 43                Message finalMessage;
 44                finalMessage = JsonUtility.FromJson<Message>(e.Data);
 45
 46                WSSController.queuedMessages.Enqueue(finalMessage);
 47                WSSController.queuedMessagesDirty = true;
 48            }
 49        }
 50
 51        protected override void OnError(ErrorEventArgs e) { base.OnError(e); }
 52
 53        protected override void OnClose(CloseEventArgs e)
 54        {
 55            base.OnClose(e);
 56            WebInterface.OnMessageFromEngine -= SendMessageToWeb;
 57        }
 58
 59        protected override void OnOpen()
 60        {
 61            base.OnOpen();
 62            WebInterface.OnMessageFromEngine += SendMessageToWeb;
 63            Send("{\"welcome\": true}");
 64            if (enterAsAGuest)
 65                WebInterface.SendAuthentication(WebInterface.RendererAuthenticationType.Guest);
 66        }
 67    }
 68
 69    public class WSSController : MonoBehaviour
 70    {
 71        public enum DebugPanel
 72        {
 73            Off,
 74            Scene,
 75            Engine
 76        }
 77
 78        public enum BaseUrl
 79        {
 80            LOCAL_HOST,
 81            CUSTOM,
 82        }
 83
 84        public enum Environment
 85        {
 86            USE_DEFAULT_FROM_URL,
 87            LOCAL,
 88            ZONE,
 89            TODAY,
 90            ORG
 91        }
 92
 93        private const string ENGINE_DEBUG_PANEL = "ENGINE_DEBUG_PANEL";
 94        private const string SCENE_DEBUG_PANEL = "SCENE_DEBUG_PANEL";
 095        public static WSSController i { get; private set; }
 096        static bool VERBOSE = false;
 97        WebSocketServer ws;
 98        public RenderingController renderingController;
 99        public DCLCharacterController characterController;
 100        private Builder.DCLBuilderBridge builderBridge = null;
 101        private BuilderInWorldBridge builderInWorldBridge = null;
 102        private HUDBridge hudBridge = null;
 103        public CameraController cameraController;
 104        public GameObject bridgesGameObject;
 105
 106        [System.NonSerialized]
 0107        public static Queue<DCLWebSocketService.Message> queuedMessages = new Queue<DCLWebSocketService.Message>();
 108
 109        [System.NonSerialized]
 110        public static volatile bool queuedMessagesDirty;
 111
 0112        public bool isServerReady { get { return ws.IsListening; } }
 113
 0114        public string wssServerUrl = "ws://localhost:5000/";
 115        public bool openBrowserWhenStart;
 116
 117        [Header("Kernel General Settings")]
 118        public bool useCustomContentServer = false;
 119
 0120        public string customContentServerUrl = "http://localhost:1338/";
 121
 122        [Space(10)]
 123        public BaseUrl baseUrlMode;
 124
 125        public string baseUrlCustom;
 126
 127        [Space(10)]
 128        public Environment environment;
 129
 0130        public Vector2 startInCoords = new Vector2(-99, 109);
 131
 132        [Header("Kernel Misc Settings")]
 0133        public bool forceLocalComms = true;
 134
 135        public bool allWearables = false;
 136        public bool testWearables = false;
 137        public bool enableTutorial = false;
 138        public bool builderInWorld = false;
 0139        public bool soloScene = true;
 140        public DebugPanel debugPanelMode = DebugPanel.Off;
 141
 0142        private void Awake() { i = this; }
 143
 144        private void Start()
 145        {
 0146            if (useCustomContentServer)
 147            {
 0148                RendereableAssetLoadHelper.useCustomContentServerUrl = true;
 0149                RendereableAssetLoadHelper.customContentServerUrl = customContentServerUrl;
 150            }
 151
 152#if (UNITY_EDITOR || UNITY_STANDALONE)
 0153            DCL.DataStore.i.debugConfig.isWssDebugMode = true;
 154
 0155            string wssUrl = this.wssServerUrl;
 0156            string wssServiceId = "dcl";
 0157            ws = new WebSocketServer(wssUrl);
 0158            ws.AddWebSocketService<DCLWebSocketService>("/" + wssServiceId);
 0159            ws.Start();
 160
 0161            if (openBrowserWhenStart)
 162            {
 0163                string baseUrl = "";
 0164                string debugString = "";
 165
 0166                if (baseUrlMode == BaseUrl.CUSTOM)
 0167                    baseUrl = baseUrlCustom;
 168                else
 0169                    baseUrl = "http://localhost:3000/?";
 170
 0171                switch (environment)
 172                {
 173                    case Environment.USE_DEFAULT_FROM_URL:
 174                        break;
 175                    case Environment.LOCAL:
 0176                        debugString = "DEBUG_MODE&";
 0177                        break;
 178                    case Environment.ZONE:
 0179                        debugString = "ENV=zone&";
 0180                        break;
 181                    case Environment.TODAY:
 0182                        debugString = "ENV=today&";
 0183                        break;
 184                    case Environment.ORG:
 0185                        debugString = "ENV=org&";
 186                        break;
 187                }
 188
 0189                if (forceLocalComms)
 190                {
 0191                    debugString += "LOCAL_COMMS&";
 192                }
 193
 0194                if (allWearables)
 195                {
 0196                    debugString += "ALL_WEARABLES&";
 197                }
 198
 0199                if (testWearables)
 200                {
 0201                    debugString += "TEST_WEARABLES&";
 202                }
 203
 0204                if (enableTutorial)
 205                {
 0206                    debugString += "RESET_TUTORIAL&";
 207                }
 208
 0209                if (soloScene)
 210                {
 0211                    debugString += "LOS=0&";
 212                }
 213
 0214                if (builderInWorld)
 215                {
 0216                    debugString += "ENABLE_BUILDER_IN_WORLD&";
 217                }
 218
 0219                string debugPanelString = "";
 220
 0221                if (debugPanelMode == DebugPanel.Engine)
 222                {
 0223                    debugPanelString = ENGINE_DEBUG_PANEL + "&";
 0224                }
 0225                else if (debugPanelMode == DebugPanel.Scene)
 226                {
 0227                    debugPanelString = SCENE_DEBUG_PANEL + "&";
 228                }
 229
 0230                Application.OpenURL(
 231                    $"{baseUrl}{debugString}{debugPanelString}position={startInCoords.x}%2C{startInCoords.y}&ws=" + wssU
 232            }
 233#endif
 0234        }
 235
 236        private void OnDestroy()
 237        {
 238#if (UNITY_EDITOR || UNITY_STANDALONE)
 0239            if (ws != null)
 240            {
 0241                ws.Stop();
 0242                ws = null;
 243            }
 244#endif
 0245        }
 246
 247        void Update()
 248        {
 249#if (UNITY_EDITOR || UNITY_STANDALONE)
 0250            lock (WSSController.queuedMessages)
 251            {
 0252                if (queuedMessagesDirty)
 253                {
 0254                    while (queuedMessages.Count > 0)
 255                    {
 0256                        DCLWebSocketService.Message msg = queuedMessages.Dequeue();
 257
 0258                        if (VERBOSE)
 259                        {
 0260                            Debug.Log(
 261                                "<b><color=#0000FF>WSSController</color></b> >>> Got it! passing message of type " +
 262                                msg.type);
 263                        }
 264
 0265                        switch (msg.type)
 266                        {
 267                            case "SetDebug":
 0268                                DCL.Environment.i.platform.debugController.SetDebug();
 0269                                break;
 270                            case "SetSceneDebugPanel":
 0271                                DCL.Environment.i.platform.debugController.SetSceneDebugPanel();
 0272                                break;
 273                            case "ShowFPSPanel":
 0274                                DCL.Environment.i.platform.debugController.ShowFPSPanel();
 0275                                break;
 276                            case "HideFPSPanel":
 0277                                DCL.Environment.i.platform.debugController.HideFPSPanel();
 0278                                break;
 279                            case "SetEngineDebugPanel":
 0280                                DCL.Environment.i.platform.debugController.SetEngineDebugPanel();
 0281                                break;
 282                            case "SendSceneMessage":
 0283                                DCL.Environment.i.world.sceneController.SendSceneMessage(msg.payload);
 0284                                break;
 285                            case "LoadParcelScenes":
 0286                                DCL.Environment.i.world.sceneController.LoadParcelScenes(msg.payload);
 0287                                break;
 288                            case "UnloadScene":
 0289                                DCL.Environment.i.world.sceneController.UnloadScene(msg.payload);
 0290                                break;
 291                            case "Reset":
 0292                                DCL.Environment.i.world.sceneController.UnloadAllScenesQueued();
 0293                                break;
 294                            case "CreateGlobalScene":
 0295                                DCL.Environment.i.world.sceneController.CreateGlobalScene(msg.payload);
 0296                                break;
 297                            case "BuilderReady":
 0298                                Main.i.BuilderReady();
 0299                                break;
 300                            case "UpdateParcelScenes":
 0301                                DCL.Environment.i.world.sceneController.UpdateParcelScenes(msg.payload);
 0302                                break;
 303                            case "Teleport":
 0304                                characterController.Teleport(msg.payload);
 0305                                break;
 306                            case "SetRotation":
 0307                                cameraController.SetRotation(msg.payload);
 0308                                break;
 309                            case "LoadProfile":
 0310                                UserProfileController.i?.LoadProfile(msg.payload);
 0311                                break;
 312                            case "AddUserProfileToCatalog":
 0313                                UserProfileController.i.AddUserProfileToCatalog(msg.payload);
 0314                                break;
 315                            case "AddUserProfilesToCatalog":
 0316                                UserProfileController.i.AddUserProfilesToCatalog(msg.payload);
 0317                                break;
 318                            case "RemoveUserProfilesFromCatalog":
 0319                                UserProfileController.i.RemoveUserProfilesFromCatalog(msg.payload);
 0320                                break;
 321                            case "ActivateRendering":
 0322                                renderingController.ActivateRendering();
 0323                                break;
 324                            case "DeactivateRendering":
 0325                                renderingController.DeactivateRendering();
 0326                                break;
 327                            case "ReportFocusOn":
 0328                                bridgesGameObject.SendMessage(msg.type, msg.payload);
 0329                                break;
 330                            case "ReportFocusOff":
 0331                                bridgesGameObject.SendMessage(msg.type, msg.payload);
 0332                                break;
 333                            case "ForceActivateRendering":
 0334                                renderingController.ForceActivateRendering();
 0335                                break;
 336                            case "ShowNotificationFromJson":
 0337                                NotificationsController.i.ShowNotificationFromJson(msg.payload);
 0338                                break;
 339                            case "GetMousePosition":
 0340                                GetBuilderBridge()?.GetMousePosition(msg.payload);
 0341                                break;
 342                            case "SelectGizmo":
 0343                                GetBuilderBridge()?.SelectGizmo(msg.payload);
 0344                                break;
 345                            case "ResetObject":
 0346                                GetBuilderBridge()?.ResetObject();
 0347                                break;
 348                            case "ZoomDelta":
 0349                                GetBuilderBridge()?.ZoomDelta(msg.payload);
 0350                                break;
 351                            case "SetPlayMode":
 0352                                GetBuilderBridge()?.SetPlayMode(msg.payload);
 0353                                break;
 354                            case "TakeScreenshot":
 0355                                GetBuilderBridge()?.TakeScreenshot(msg.payload);
 0356                                break;
 357                            case "ResetBuilderScene":
 0358                                GetBuilderBridge()?.ResetBuilderScene();
 0359                                break;
 360                            case "SetBuilderCameraPosition":
 0361                                GetBuilderBridge()?.SetBuilderCameraPosition(msg.payload);
 0362                                break;
 363                            case "SetBuilderCameraRotation":
 0364                                GetBuilderBridge()?.SetBuilderCameraRotation(msg.payload);
 0365                                break;
 366                            case "ResetBuilderCameraZoom":
 0367                                GetBuilderBridge()?.ResetBuilderCameraZoom();
 0368                                break;
 369                            case "SetGridResolution":
 0370                                GetBuilderBridge()?.SetGridResolution(msg.payload);
 0371                                break;
 372                            case "OnBuilderKeyDown":
 0373                                GetBuilderBridge()?.OnBuilderKeyDown(msg.payload);
 0374                                break;
 375                            case "UnloadBuilderScene":
 0376                                GetBuilderBridge()?.UnloadBuilderScene(msg.payload);
 0377                                break;
 378                            case "SetSelectedEntities":
 0379                                GetBuilderBridge()?.SetSelectedEntities(msg.payload);
 0380                                break;
 381                            case "GetCameraTargetBuilder":
 0382                                GetBuilderBridge()?.GetCameraTargetBuilder(msg.payload);
 0383                                break;
 384                            case "PreloadFile":
 0385                                GetBuilderBridge()?.PreloadFile(msg.payload);
 0386                                break;
 387                            case "SetBuilderConfiguration":
 0388                                GetBuilderBridge()?.SetBuilderConfiguration(msg.payload);
 0389                                break;
 390                            case "AddWearablesToCatalog":
 0391                                CatalogController.i?.AddWearablesToCatalog(msg.payload);
 0392                                break;
 393                            case "WearablesRequestFailed":
 0394                                CatalogController.i?.WearablesRequestFailed(msg.payload);
 0395                                break;
 396                            case "RemoveWearablesFromCatalog":
 0397                                CatalogController.i?.RemoveWearablesFromCatalog(msg.payload);
 0398                                break;
 399                            case "ClearWearableCatalog":
 0400                                CatalogController.i?.ClearWearableCatalog();
 0401                                break;
 402                            case "ConfigureHUDElement":
 0403                                GetHUDBridge()?.ConfigureHUDElement(msg.payload);
 0404                                break;
 405                            case "InitializeFriends":
 0406                                FriendsController.i?.InitializeFriends(msg.payload);
 0407                                break;
 408                            case "UpdateFriendshipStatus":
 0409                                FriendsController.i?.UpdateFriendshipStatus(msg.payload);
 0410                                break;
 411                            case "UpdateUserPresence":
 0412                                FriendsController.i?.UpdateUserPresence(msg.payload);
 0413                                break;
 414                            case "FriendNotFound":
 0415                                FriendsController.i?.FriendNotFound(msg.payload);
 0416                                break;
 417                            case "AddMessageToChatWindow":
 0418                                ChatController.i?.AddMessageToChatWindow(msg.payload);
 0419                                break;
 420                            case "UpdateMinimapSceneInformation":
 0421                                MinimapMetadataController.i?.UpdateMinimapSceneInformation(msg.payload);
 0422                                break;
 423                            case "SetTutorialEnabled":
 0424                                DCL.Tutorial.TutorialController.i?.SetTutorialEnabled(msg.payload);
 0425                                break;
 426                            case "SetTutorialEnabledForUsersThatAlreadyDidTheTutorial":
 0427                                DCL.Tutorial.TutorialController.i?.SetTutorialEnabledForUsersThatAlreadyDidTheTutorial(m
 0428                                break;
 429                            case "TriggerSelfUserExpression":
 0430                                GetHUDBridge().TriggerSelfUserExpression(msg.payload);
 0431                                break;
 432                            case "AirdroppingRequest":
 0433                                GetHUDBridge().AirdroppingRequest(msg.payload);
 0434                                break;
 435                            case "ShowWelcomeNotification":
 0436                                NotificationsController.i.ShowWelcomeNotification();
 0437                                break;
 438                            case "ShowTermsOfServices":
 0439                                GetHUDBridge().ShowTermsOfServices(msg.payload);
 0440                                break;
 441                            case "RequestTeleport":
 0442                                GetHUDBridge().RequestTeleport(msg.payload);
 0443                                break;
 444                            case "UpdateHotScenesList":
 0445                                HotScenesController.i.UpdateHotScenesList(msg.payload);
 0446                                break;
 447                            case "UpdateBalanceOfMANA":
 0448                                GetHUDBridge().UpdateBalanceOfMANA(msg.payload);
 0449                                break;
 450                            case "SetPlayerTalking":
 0451                                GetHUDBridge().SetPlayerTalking(msg.payload);
 0452                                break;
 453                            case "SetVoiceChatEnabledByScene":
 0454                                if (int.TryParse(msg.payload, out int value))
 455                                {
 0456                                    GetHUDBridge().SetVoiceChatEnabledByScene(value);
 457                                }
 458
 0459                                break;
 460                            case "SetRenderProfile":
 0461                                RenderProfileBridge.i.SetRenderProfile(msg.payload);
 0462                                break;
 463                            case "ShowAvatarEditorInSignUp":
 0464                                GetHUDBridge().ShowAvatarEditorInSignUp();
 0465                                break;
 466                            case "SetUserTalking":
 0467                                GetHUDBridge().SetUserTalking(msg.payload);
 0468                                break;
 469                            case "SetUsersMuted":
 0470                                GetHUDBridge().SetUsersMuted(msg.payload);
 0471                                break;
 472                            case "SetKernelConfiguration":
 473                            case "UpdateRealmsInfo":
 474                            case "ConnectionToRealmSuccess":
 475                            case "ConnectionToRealmFailed":
 476                            case "InitializeQuests":
 477                            case "UpdateQuestProgress":
 478                            case "SetENSOwnerQueryResult":
 479                            case "UnpublishSceneResult":
 0480                                bridgesGameObject.SendMessage(msg.type, msg.payload);
 0481                                break;
 482                            case "CrashPayloadRequest":
 483                            case "SetDisableAssetBundles":
 484                            case "DumpRendererLockersInfo":
 485                                //TODO(Brian): Move this to bridges
 0486                                Main.i.SendMessage(msg.type);
 0487                                break;
 488                            case "PublishSceneResult":
 0489                                GetBuilderInWorldBridge()?.PublishSceneResult(msg.payload);
 0490                                break;
 491                            case "BuilderProjectInfo":
 0492                                GetBuilderInWorldBridge()?.BuilderProjectInfo(msg.payload);
 0493                                break;
 494                            case "BuilderInWorldCatalogHeaders":
 0495                                GetBuilderInWorldBridge()?.BuilderInWorldCatalogHeaders(msg.payload);
 0496                                break;
 497                            case "RunPerformanceMeterTool":
 0498                                if (float.TryParse(msg.payload, out float durationInSeconds))
 499                                {
 0500                                    DCL.Environment.i.platform.debugController.RunPerformanceMeterTool(durationInSeconds
 501                                }
 502
 0503                                break;
 504                            case "InstantiateBotsAtWorldPos":
 0505                                DCL.Environment.i.platform.debugController.InstantiateBotsAtWorldPos(msg.payload);
 0506                                break;
 507                            case "InstantiateBotsAtCoords":
 0508                                DCL.Environment.i.platform.debugController.InstantiateBotsAtCoords(msg.payload);
 0509                                break;
 510                            case "RemoveBot":
 0511                                DCL.Environment.i.platform.debugController.RemoveBot(msg.payload);
 0512                                break;
 513                            case "ClearBots":
 0514                                DCL.Environment.i.platform.debugController.ClearBots();
 0515                                break;
 516                            default:
 0517                                Debug.Log(
 518                                    "<b><color=#FF0000>WSSController:</color></b> received an unknown message from kerne
 519                                    msg.type);
 520                                break;
 521                        }
 522                    }
 523
 0524                    queuedMessagesDirty = false;
 525                }
 0526            }
 527#endif
 0528        }
 529
 530        private Builder.DCLBuilderBridge GetBuilderBridge()
 531        {
 0532            if (builderBridge == null)
 533            {
 0534                builderBridge = FindObjectOfType<Builder.DCLBuilderBridge>();
 535            }
 536
 0537            return builderBridge;
 538        }
 539
 540        private BuilderInWorldBridge GetBuilderInWorldBridge()
 541        {
 0542            if (builderInWorldBridge == null)
 543            {
 0544                builderInWorldBridge = FindObjectOfType<BuilderInWorldBridge>();
 545            }
 546
 0547            return builderInWorldBridge;
 548        }
 549
 550        private HUDBridge GetHUDBridge()
 551        {
 0552            if (hudBridge == null)
 553            {
 0554                hudBridge = FindObjectOfType<HUDBridge>();
 555            }
 556
 0557            return hudBridge;
 558        }
 559    }
 560}