< Summary

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

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RPCServerBuilder(...)0%110100%
RegisterService(...)0%110100%
Build()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
 18            var transport = new WebSocketTransport();
 19#endif
 20            return BuildDefaultServer(context, transport);
 21        }
 22
 23        public static RpcServer<RPCContext> BuildDefaultServer(RPCContext context, ITransport transport)
 24        {
 25            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        {
 35            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;
 50043        private readonly List<Action<RpcServerPort<T>>> servicesRegisterer = new List<Action<RpcServerPort<T>>>();
 44
 50045        internal RPCServerBuilder(ITransport transport, T context)
 46        {
 50047            this.transport = transport;
 50048            this.context = context;
 50049        }
 50
 51        public RPCServerBuilder<T> RegisterService(Action<RpcServerPort<T>> serviceRegisterer)
 52        {
 200053            servicesRegisterer.Add(serviceRegisterer);
 200054            return this;
 55        }
 56
 57        public RpcServer<T> Build()
 58        {
 50059            var services = servicesRegisterer.ToArray();
 50060            var rpcServer = new RpcServer<T>();
 50061            rpcServer.AttachTransport(transport, context);
 62
 50063            rpcServer.SetHandler((port, t, c) =>
 64            {
 065                for (int i = 0; i < services.Length; i++)
 66                {
 067                    services[i].Invoke(port);
 68                }
 069            });
 50070            return rpcServer;
 71        }
 72    }
 73}