< Summary

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

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BuildDefaultServer(...)0%110100%
BuildDefaultServer(...)0%110100%
BuildServer(...)0%110100%

File(s)

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

#LineLine coverage
 1using DCl.Social.Friends;
 2using RPC.Services;
 3using RPC.Transports;
 4using rpc_csharp;
 5using rpc_csharp.transport;
 6using System;
 7using System.Collections.Generic;
 8
 9namespace RPC
 10{
 11    public static class RPCServerBuilder
 12    {
 13        public static RpcServer<RPCContext> BuildDefaultServer(RPCContext context)
 14        {
 15#if UNITY_WEBGL && !UNITY_EDITOR
 16            var transport = new WebGLTransport();
 17#else
 50018            var transport = new WebSocketTransport();
 19#endif
 50020            return BuildDefaultServer(context, transport);
 21        }
 22
 23        public static RpcServer<RPCContext> BuildDefaultServer(RPCContext context, ITransport transport)
 24        {
 50025            return BuildServer(context, transport)
 26                   .RegisterService(CRDTServiceImpl.RegisterService)
 27                   .RegisterService(TransportServiceImpl.RegisterService)
 28                   .RegisterService(EmotesRendererServiceImpl.RegisterService)
 29                   .RegisterService(RPCFriendsApiBridge.RegisterService)
 30                   .Build();
 31        }
 32
 33        public static RPCServerBuilder<RPCContext> BuildServer(RPCContext context, ITransport transport)
 34        {
 50035            return new RPCServerBuilder<RPCContext>(transport, context);
 36        }
 37    }
 38
 39    public class RPCServerBuilder<T>
 40    {
 41        private readonly ITransport transport;
 42        private readonly T context;
 43        private readonly List<Action<RpcServerPort<T>>> servicesRegisterer = new List<Action<RpcServerPort<T>>>();
 44
 45        internal RPCServerBuilder(ITransport transport, T context)
 46        {
 47            this.transport = transport;
 48            this.context = context;
 49        }
 50
 51        public RPCServerBuilder<T> RegisterService(Action<RpcServerPort<T>> serviceRegisterer)
 52        {
 53            servicesRegisterer.Add(serviceRegisterer);
 54            return this;
 55        }
 56
 57        public RpcServer<T> Build()
 58        {
 59            var services = servicesRegisterer.ToArray();
 60            var rpcServer = new RpcServer<T>();
 61            rpcServer.AttachTransport(transport, context);
 62
 63            rpcServer.SetHandler((port, t, c) =>
 64            {
 65                for (int i = 0; i < services.Length; i++)
 66                {
 67                    services[i].Invoke(port);
 68                }
 69            });
 70            return rpcServer;
 71        }
 72    }
 73}