< 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:11
Coverable lines:22
Total lines:80
Line coverage:50% (11 of 22)
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%
Friends()0%2100%
EnsureRpc()0%2100%
LoadRpcModulesAsync()0%1101000%
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
 49316        private readonly UniTaskCompletionSource modulesLoaded = new ();
 17
 18        private RpcServer<RPCContext> rpcServer;
 19
 20        public ClientEmotesKernelService Emotes() =>
 121            emotes;
 22
 23        public ClientFriendRequestKernelService FriendRequests() =>
 024            friendRequests;
 25
 26        public ClientFriendsKernelService Friends() =>
 027            friends;
 28
 29        public UniTask EnsureRpc() =>
 030            modulesLoaded.Task;
 31
 32        private async UniTaskVoid LoadRpcModulesAsync(RpcClientPort port)
 33        {
 034            emotes = await SafeLoadModule(EmotesKernelServiceCodeGen.ServiceName, port,
 035                module => new ClientEmotesKernelService(module));
 36
 037            friendRequests = await SafeLoadModule(FriendRequestKernelServiceCodeGen.ServiceName, port,
 038                module => new ClientFriendRequestKernelService(module));
 39
 040            friends = await SafeLoadModule(FriendsKernelServiceCodeGen.ServiceName, port,
 041                module => new ClientFriendsKernelService(module));
 42
 043            modulesLoaded.TrySetResult();
 044        }
 45
 46        private async UniTask<T> SafeLoadModule<T>(string serviceName, RpcClientPort port, Func<RpcClientModule, T> buil
 47            where T: class
 48        {
 49            try
 50            {
 51                RpcClientModule module = await port.LoadModule(serviceName);
 52                return builderFunction.Invoke(module);
 53            }
 54            catch (Exception e)
 55            {
 56                Debug.LogException(e);
 57                // TODO: may be improved by returning a valid instance with dummy behaviour. This way we force to do nul
 58                return null;
 59            }
 60        }
 61
 62        public void Initialize()
 63        {
 49364            var context = DataStore.i.rpc.context;
 65
 49366            context.transport.OnLoadModules += port => { LoadRpcModulesAsync(port).Forget(); };
 67
 49368            context.crdt.MessagingControllersManager = Environment.i.messaging.manager;
 49369            context.crdt.WorldState = Environment.i.world.state;
 49370            context.crdt.SceneController = Environment.i.world.sceneController;
 71
 49372            rpcServer = RPCServerBuilder.BuildDefaultServer(context);
 49373        }
 74
 75        public void Dispose()
 76        {
 49377            rpcServer.Dispose();
 49378        }
 79    }
 80}