< Summary

Class:DCL.RPC
Assembly:RPC
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/KernelCommunication/RPC/RPC.cs
Covered lines:11
Uncovered lines:8
Coverable lines:19
Total lines:73
Line coverage:57.8% (11 of 19)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RPC()0%110100%
Emotes()0%110100%
FriendRequests()0%2100%
EnsureRpc()0%2100%
LoadRpcModulesAsync()0%56700%
Initialize()0%110100%
Dispose()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/KernelCommunication/RPC/RPC.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using Decentraland.Renderer.KernelServices;
 3using RPC;
 4using rpc_csharp;
 5using System;
 6using UnityEngine;
 7
 8namespace DCL
 9{
 10    public class RPC : IRPC
 11    {
 12        private ClientEmotesKernelService emotes;
 13        private ClientFriendRequestKernelService friendRequests;
 14
 50015        private readonly UniTaskCompletionSource modulesLoaded = new UniTaskCompletionSource();
 16
 17        private RpcServer<RPCContext> rpcServer;
 18
 19        public ClientEmotesKernelService Emotes() =>
 120            emotes;
 21
 22        public ClientFriendRequestKernelService FriendRequests() =>
 023            friendRequests;
 24
 25        public UniTask EnsureRpc() =>
 026            modulesLoaded.Task;
 27
 28        private async UniTaskVoid LoadRpcModulesAsync(RpcClientPort port)
 29        {
 030            emotes = await SafeLoadModule(EmotesKernelServiceCodeGen.ServiceName, port,
 031                module => new ClientEmotesKernelService(module));
 32
 033            friendRequests = await SafeLoadModule(FriendRequestKernelServiceCodeGen.ServiceName, port,
 034                module => new ClientFriendRequestKernelService(module));
 35
 036            modulesLoaded.TrySetResult();
 037        }
 38
 39        private async UniTask<T> SafeLoadModule<T>(string serviceName, RpcClientPort port, Func<RpcClientModule, T> buil
 40            where T: class
 41        {
 42            try
 43            {
 44                RpcClientModule module = await port.LoadModule(serviceName);
 45                return builderFunction.Invoke(module);
 46            }
 47            catch (Exception e)
 48            {
 49                Debug.LogException(e);
 50                // TODO: may be improved by returning a valid instance with dummy behaviour. This way we force to do nul
 51                return null;
 52            }
 53        }
 54
 55        public void Initialize()
 56        {
 50057            var context = DataStore.i.rpc.context;
 58
 50059            context.transport.OnLoadModules += port => { LoadRpcModulesAsync(port).Forget(); };
 60
 50061            context.crdt.MessagingControllersManager = Environment.i.messaging.manager;
 50062            context.crdt.WorldState = Environment.i.world.state;
 50063            context.crdt.SceneController = Environment.i.world.sceneController;
 64
 50065            rpcServer = RPCServerBuilder.BuildDefaultServer(context);
 50066        }
 67
 68        public void Dispose()
 69        {
 50070            rpcServer.Dispose();
 50071        }
 72    }
 73}