< 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:14
Coverable lines:25
Total lines:88
Line coverage:44% (11 of 25)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:9
Method coverage:44.4% (4 of 9)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RPC()0%110100%
Emotes()0%110100%
FriendRequests()0%2100%
Friends()0%2100%
SignRequestKernelService()0%2100%
EnsureRpc()0%2100%
LoadRpcModulesAsync()0%1821300%
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        private ClientFriendsKernelService friends;
 15        private ClientSignRequestKernelService signRequest;
 16
 42517        private readonly UniTaskCompletionSource modulesLoaded = new ();
 18
 19        private RpcServer<RPCContext> rpcServer;
 20
 21        public ClientEmotesKernelService Emotes() =>
 122            emotes;
 23
 24        public ClientFriendRequestKernelService FriendRequests() =>
 025            friendRequests;
 26
 27        public ClientFriendsKernelService Friends() =>
 028            friends;
 29
 30        public ClientSignRequestKernelService SignRequestKernelService() =>
 031            signRequest;
 32
 33        public UniTask EnsureRpc() =>
 034            modulesLoaded.Task;
 35
 36        private async UniTaskVoid LoadRpcModulesAsync(RpcClientPort port)
 37        {
 038            emotes = await SafeLoadModule(EmotesKernelServiceCodeGen.ServiceName, port,
 039                module => new ClientEmotesKernelService(module));
 40
 041            friendRequests = await SafeLoadModule(FriendRequestKernelServiceCodeGen.ServiceName, port,
 042                module => new ClientFriendRequestKernelService(module));
 43
 044            friends = await SafeLoadModule(FriendsKernelServiceCodeGen.ServiceName, port,
 045                module => new ClientFriendsKernelService(module));
 46
 047            signRequest = await SafeLoadModule(SignRequestKernelServiceCodeGen.ServiceName, port,
 048                module => new ClientSignRequestKernelService(module));
 49
 050            modulesLoaded.TrySetResult();
 051        }
 52
 53        private async UniTask<T> SafeLoadModule<T>(string serviceName, RpcClientPort port, Func<RpcClientModule, T> buil
 54            where T: class
 55        {
 56            try
 57            {
 58                RpcClientModule module = await port.LoadModule(serviceName);
 59                return builderFunction.Invoke(module);
 60            }
 61            catch (Exception e)
 62            {
 63                Debug.LogException(e);
 64
 65                // TODO: may be improved by returning a valid instance with dummy behaviour. This way we force to do nul
 66                return null;
 67            }
 68        }
 69
 70        public void Initialize()
 71        {
 42572            var context = DataStore.i.rpc.context;
 73
 42574            context.transport.OnLoadModules += port => { LoadRpcModulesAsync(port).Forget(); };
 75
 42576            context.crdt.MessagingControllersManager = Environment.i.messaging.manager;
 42577            context.crdt.WorldState = Environment.i.world.state;
 42578            context.crdt.SceneController = Environment.i.world.sceneController;
 79
 42580            rpcServer = RPCServerBuilder.BuildDefaultServer(context);
 42581        }
 82
 83        public void Dispose()
 84        {
 42585            rpcServer.Dispose();
 42586        }
 87    }
 88}