Esempio n. 1
0
 public Task <bool> Kick()
 {
     return(PitayaCluster.SendKickToUser(_frontendId, "", new KickMsg
     {
         UserId = Uid
     }));
 }
Esempio n. 2
0
 public Task <bool> Kick(string svType)
 {
     return(PitayaCluster.SendKickToUser("", svType, new KickMsg
     {
         UserId = Uid
     }));
 }
Esempio n. 3
0
        public void Can_Be_Initialized_And_Terminated_Multiple_Times()
        {
            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 40405,
                serverShutdownDeadlineMs: 2000,
                serverMaxNumberOfRpcs: 100,
                clientRpcTimeoutMs: 10000
                );

            var sdCfg = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                heartbeatTTLSec: 10,
                logHeartbeat: false,
                logServerSync: false,
                logServerDetails: false,
                syncServersIntervalSec: 10,
                maxNumberOfRetries: 0
                );

            var server = new Server(
                id: "myserverid",
                type: "myservertype",
                metadata: "",
                hostname: "",
                frontend: false
                );

            for (var i = 0; i < 2; ++i)
            {
                PitayaCluster.Initialize(grpcConfig, sdCfg, server, NativeLogLevel.Debug);
                PitayaCluster.Terminate();
            }
        }
Esempio n. 4
0
    void InitButtonClicked()
    {
        Pitaya.Logger.SetLevel(LogLevel.DEBUG);
        Console.WriteLine("c# prog running");

        SDConfig            sdConfig        = new SDConfig("127.0.0.1:2379", 30, "pitaya/", 30, true, 60);
        NatsRPCClientConfig rpcClientConfig = new NatsRPCClientConfig("nats://localhost:4222", 10, 5000);
        // TODO does it makes sense to give freedom to set reconnectionRetries and messagesBufferSize?
        NatsRPCServerConfig rpcServerConfig = new NatsRPCServerConfig("nats://localhost:4222", 10, 75);

        PitayaCluster.Init(
            sdConfig,
            rpcClientConfig,
            rpcServerConfig,
            new Server(
                System.Guid.NewGuid().ToString(),
                "unity",
                "{\"ip\":\"127.0.0.1\"}",
                false)
            );

        TestRemote tr = new TestRemote();

        PitayaCluster.RegisterRemote(tr);
    }
 private void Awake()
 {
     PitayaCluster.AddSignalHandler(() =>
     {
         Debug.Log("Got signal handler, quitting pitaya cluster");
         Application.Quit();
     });
 }
Esempio n. 6
0
    void SendRPCButtonClicked()
    {
        string text = inputRPC.text;

        Protos.RPCMsg msg = new Protos.RPCMsg();
        msg.Msg = text;
        try
        {
            Protos.RPCRes res = PitayaCluster.RPC <Protos.RPCRes>(Pitaya.Route.fromString("connector.testremote.test"), msg);
            Debug.Log(String.Format("received rpc res: {0}", res.Msg));
        } catch (Exception e) {
            Debug.Log(e.Message);
        }
    }
Esempio n. 7
0
        static async void TrySendRpc()
        {
            try
            {
                var res = await PitayaCluster.Rpc <NPitaya.Protos.RPCRes>(Route.FromString("csharp.testRemote.remote"),
                                                                          null);

                Console.WriteLine($"Code: {res.Code}");
                Console.WriteLine($"Msg: {res.Msg}");
            }
            catch (PitayaException e)
            {
                Logger.Error("Error sending RPC Call: {0}", e.Message);
            }
        }
Esempio n. 8
0
        private Task SendRequestToFront(string route, bool includeData)
        {
            var sessionProto = new Protos.Session
            {
                Id  = _id,
                Uid = Uid
            };

            if (includeData)
            {
                sessionProto.Data = ByteString.CopyFromUtf8(_rawData);
            }
            Console.WriteLine($"sending {sessionProto}");
            return(PitayaCluster.Rpc <Response>(_frontendId, Route.FromString(route), sessionProto.ToByteArray()));
        }
    private void SendRpcButtonClicked()
    {
        var msg = new Protos.RPCMsg {
            Msg = inputRPC.text
        };

        try
        {
            // var res = PitayaCluster.Rpc<Protos.RPCRes>(Route.FromString("csharp.testremote.remote"), msg);
            var res = PitayaCluster.Rpc <Protos.RPCRes>(Route.FromString("room.room.test"), msg).Result;
            Debug.Log($"received rpc res: {res.Msg}");
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
    }
Esempio n. 10
0
        public void Can_Fail_Initialization_Multiple_Times()
        {
            var natsConfig = new NatsConfig(
                endpoint: "http://127.0.0.1:4222",
                connectionTimeoutMs: 1000,
                requestTimeoutMs: 5000,
                serverShutdownDeadlineMs: 10 * 1000,
                serverMaxNumberOfRpcs: int.MaxValue,
                maxConnectionRetries: 3,
                maxPendingMessages: 100,
                reconnectBufSize: 4 * 1024 * 1024);

            var sdCfg = new SDConfig(
                endpoints: "127.0.0.1:123123123",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 10,
                logHeartbeat: false,
                logServerSync: false,
                logServerDetails: false,
                syncServersIntervalSec: 10,
                maxNumberOfRetries: 0,
                retryDelayMilliseconds: 0
                );

            var server = new Server(
                id: "id",
                type: "type",
                metadata: "",
                hostname: "",
                frontend: false
                );

            for (var i = 0; i < 10; ++i)
            {
                Assert.Throws <PitayaException>(() =>
                {
                    PitayaCluster.Initialize(natsConfig, sdCfg, server, NativeLogLevel.Debug);
                });
            }

            PitayaCluster.Terminate();
        }
        public void Can_Fail_Initialization_Multiple_Times()
        {
            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 40405,
                serverShutdownDeadlineMs: 2000,
                serverMaxNumberOfRpcs: 100,
                clientRpcTimeoutMs: 10000
                );

            var sdCfg = new SDConfig(
                endpoints: "127.0.0.1:123123123",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 10,
                logHeartbeat: false,
                logServerSync: false,
                logServerDetails: false,
                syncServersIntervalSec: 10,
                maxNumberOfRetries: 0,
                retryDelayMilliseconds: 0
                );

            var server = new Server(
                id: "id",
                type: "type",
                metadata: "",
                hostname: "",
                frontend: false
                );

            for (var i = 0; i < 10; ++i)
            {
                Assert.Throws <PitayaException>(() =>
                {
                    PitayaCluster.Initialize(grpcConfig, sdCfg, server, NativeLogLevel.Debug);
                });
            }

            PitayaCluster.Terminate();
        }
Esempio n. 12
0
        public PitayaReporter(PrometheusReporter prometheusReporter)
        {
            var handle      = GCHandle.Alloc(prometheusReporter, GCHandleType.Normal);
            var reporterPtr = GCHandle.ToIntPtr(handle);

            _registerCounterDelegate   = RegisterCounterFn;
            _registerGaugeDelegate     = RegisterGaugeFn;
            _registerHistogramDelegate = RegisterHistogramFn;
            _incCounterDelegate        = IncCounterFn;
            _setGaugeDelegate          = SetGaugeFn;
            _addGaugeFn    = AddGaugeFn;
            _observeHistFn = ObserveHistFn;

            Ptr = PitayaCluster.pitaya_metrics_reporter_new(
                _registerCounterDelegate,
                _registerHistogramDelegate,
                _registerGaugeDelegate,
                _incCounterDelegate,
                _observeHistFn,
                _setGaugeDelegate,
                _addGaugeFn,
                reporterPtr);
        }
Esempio n. 13
0
 static async void TrySendRpc()
 {
     Logger.Info("Sending RPC....");
     try
     {
         var res = await PitayaCluster.Rpc<NPitaya.Protos.MyResponse>(
             Route.FromString("csharp.testRemote.remote"),
             new NPitaya.Protos.RPCMsg
             {
                 Route = "random.route.man",
                 Msg = "HEY",
             }
         );
         Console.WriteLine("GOT MESSAGE!!!");
         Console.WriteLine($"Code: {res.Code}");
         Console.WriteLine($"Msg: {res.Msg}");
         PitayaCluster.ObserveHistogram("my_histogram", 3, new []{"its_value"});
     }
     catch (PitayaException e)
     {
         Logger.Error("Error sending RPC Call: {0}", e.Message);
     }
 }
Esempio n. 14
0
        public void Can_Be_Initialized_And_Terminated_Multiple_Times()
        {
            var natsConfig = new NatsConfig(
                endpoint: "http://127.0.0.1:4222",
                connectionTimeoutMs: 1000,
                requestTimeoutMs: 5000,
                serverShutdownDeadlineMs: 10 * 1000,
                serverMaxNumberOfRpcs: int.MaxValue,
                maxConnectionRetries: 3,
                maxPendingMessages: 100);

            var sdCfg = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 10,
                logHeartbeat: false,
                logServerSync: false,
                logServerDetails: false,
                syncServersIntervalSec: 10,
                maxNumberOfRetries: 0
                );

            var server = new Server(
                id: "myserverid",
                type: "myservertype",
                metadata: "",
                hostname: "",
                frontend: false
                );

            for (var i = 0; i < 2; ++i)
            {
                PitayaCluster.Initialize(natsConfig, sdCfg, server, NativeLogLevel.Debug);
                PitayaCluster.Terminate();
            }
        }
Esempio n. 15
0
        static void Main(string[] args)
        {
            Logger.SetLevel(LogLevel.DEBUG);

            Console.WriteLine("c# prog running");

            string serverId = System.Guid.NewGuid().ToString();

            var sdConfig = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 60,
                logHeartbeat: true,
                logServerSync: true,
                logServerDetails: true,
                syncServersIntervalSec: 30,
                maxNumberOfRetries: 0,
                retryDelayMilliseconds: 0);

            var sv = new Server(
                id: serverId,
                type: "csharp",
                metadata: "",
                hostname: "localhost",
                frontend: false);

            var natsConfig = new NatsConfig(
                endpoint: "127.0.0.1:4222",
                connectionTimeoutMs: 2000,
                requestTimeoutMs: 1000,
                serverShutdownDeadlineMs: 3,
                serverMaxNumberOfRpcs: 100,
                maxConnectionRetries: 3,
                maxPendingMessages: 1000,
                reconnectBufSize: 4 * 1024 * 1024);

            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 5444,
                serverShutdownDeadlineMs: 2000,
                serverMaxNumberOfRpcs: 200,
                clientRpcTimeoutMs: 10000
                );

            Dictionary <string, string> constantTags = new Dictionary <string, string>
            {
                { "game", "game" },
                { "serverType", "svType" }
            };
            var statsdMR = new StatsdMetricsReporter("localhost", 5000, "game", constantTags);

            MetricsReporters.AddMetricReporter(statsdMR);
            var prometheusMR = new PrometheusMetricsReporter("default", "game", 9090);

            MetricsReporters.AddMetricReporter(prometheusMR);

            PitayaCluster.AddSignalHandler(() =>
            {
                Logger.Info("Calling terminate on cluster");
                PitayaCluster.Terminate();
                Logger.Info("Cluster terminated, exiting app");
                Environment.Exit(1);
                //Environment.FailFast("oops");
            });

            try
            {
                PitayaCluster.Initialize(
                    grpcConfig,
                    sdConfig,
                    sv,
                    NativeLogLevel.Debug,
                    new PitayaCluster.ServiceDiscoveryListener((action, server) =>
                {
                    switch (action)
                    {
                    case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                        Console.WriteLine("Server was added");
                        Console.WriteLine("    id: " + server.id);
                        Console.WriteLine("  type: " + server.type);
                        break;

                    case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                        Console.WriteLine("Server was removed");
                        Console.WriteLine("    id: " + server.id);
                        Console.WriteLine("  type: " + server.type);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(action), action, null);
                    }
                }));
                //PitayaCluster.Initialize(natsConfig, sdConfig, sv, NativeLogLevel.Debug, "");
            }
            catch (PitayaException exc)
            {
                Logger.Error("Failed to create cluster: {0}", exc.Message);
                Environment.Exit(1);
            }

            Logger.Info("pitaya lib initialized successfully :)");

            var tr = new TestRemote();

            PitayaCluster.RegisterRemote(tr);
            var th = new TestHandler();

            PitayaCluster.RegisterHandler(th);

            Thread.Sleep(1000);

            TrySendRpc();
            Console.ReadKey();
            PitayaCluster.Terminate();
        }
 void OnApplicationQuit()
 {
     Debug.Log("Destroying pitaya cluster");
     PitayaCluster.Terminate();
 }
    private void Init()
    {
        Debug.Log("Init button clicked!");

        NPitaya.Models.Logger.SetLevel(LogLevel.DEBUG);
        Console.WriteLine("c# prog running");

        string serverId = Guid.NewGuid().ToString();

        var sdConfig = new SDConfig(
            endpoints: "http://10.0.21.167:2379",
            etcdPrefix: "pitaya/",
            serverTypeFilters: new List <string>(),
            heartbeatTTLSec: 60,
            logHeartbeat: false,
            logServerSync: true,
            logServerDetails: false,
            syncServersIntervalSec: 60,
            maxNumberOfRetries: 10,
            retryDelayMilliseconds: 100);

        var grpcConfig = new GrpcConfig(
            host: "127.0.0.1",
            port: 3000,
            serverShutdownDeadlineMs: 3000,
            serverMaxNumberOfRpcs: 1000,
            clientRpcTimeoutMs: 4000
            );

        var sv = new Server(
            serverId,
            "csharp",
            "{\"ip\":\"127.0.0.1\"}",
            "localhost",
            false);

        var nc = new NatsConfig(
            endpoint: "127.0.0.1:4222",
            connectionTimeoutMs: 2000,
            requestTimeoutMs: 2000,
            serverShutdownDeadlineMs: 4000,
            serverMaxNumberOfRpcs: 1000,
            maxConnectionRetries: 10,
            maxPendingMessages: 100,
            reconnectBufSize: 4 * 1024 * 1024);

        Debug.Log("Adding signal handler");
        Debug.Log("Adding signal handler DONE");

        try
        {
            Debug.Log("Initializing PitayaCluster");
            // PitayaCluster.Initialize(sdConfig, nc, sv);

            var listener = new PitayaCluster.ServiceDiscoveryListener((action, server) =>
            {
                switch (action)
                {
                case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                    Debug.Log("Server added:");
                    Debug.Log("    id:  " + server.id);
                    Debug.Log("    type:" + server.type);
                    break;

                case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                    Debug.Log("Server removed:");
                    Debug.Log("    id:  " + server.id);
                    Debug.Log("    type:" + server.type);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(action), action, null);
                }
            });
                    #if UNITY_EDITOR
            PitayaCluster.Initialize(nc, sdConfig, sv, NativeLogLevel.Debug, listener, "MY_LOG_FILE.txt");
                    #else
            PitayaCluster.Initialize(grpcConfig, sdConfig, sv, NativeLogLevel.Debug, listener);
            #endif
        }
        catch (PitayaException e)
        {
            Debug.LogError($"Failed to create cluster {e.Message}");
            Application.Quit();
            return;
        }

        NPitaya.Models.Logger.Info("pitaya lib initialized successfully :)");

        var tr = new TestRemote();
        PitayaCluster.RegisterRemote(tr);
    }
Esempio n. 18
0
        static void Main(string[] args)
        {
            Logger.SetLevel(LogLevel.DEBUG);

            Console.WriteLine("c# prog running");

            var constantTags = new Dictionary<string, string>
            {
                {"game", "game"},
                {"serverType", "svType"}
            };

            AppDomain.CurrentDomain.ProcessExit += (object sender, EventArgs args) =>
            {
                Console.WriteLine("shutting down pitaya cluster");
                PitayaCluster.Terminate();
            };

            var customMetrics = new CustomMetrics();
            customMetrics.AddHistogram(
                "my_histogram",
                new HistogramBuckets(HistogramBucketKind.Linear, 1, 2, 10),
                "Some test histogram",
                new []{"my_label"});
            var metricsParameters = new MetricsConfiguration(
                true,
                "127.0.0.1",
                "8000",
                "myns",
                customMetrics);

            try
            {
                PitayaCluster.Initialize(
                    "exampleapp",
                    "csharp.toml",
                    new Server(
                        id: Guid.NewGuid().ToString(),
                        kind: "csharp",
                        metadata: "{}",
                        hostname: "ololo",
                        frontend: false
                    ),
                    NativeLogLevel.Debug,
                    NativeLogKind.Console,
                    (msg) =>
                    {
                        Console.Write($"C# Log: {msg}");
                    },
                    metricsParameters,
                    new PitayaCluster.ServiceDiscoveryListener((action, server) =>
                    {
                        switch (action)
                        {
                            case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                                Console.WriteLine("Server was added");
                                Console.WriteLine("    id: " + server.Id);
                                Console.WriteLine("  kind: " + server.Kind);
                                break;
                            case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                                Console.WriteLine("Server was removed");
                                Console.WriteLine("    id: " + server.Id);
                                Console.WriteLine("  kind: " + server.Kind);
                                break;
                            default:
                                throw new ArgumentOutOfRangeException(nameof(action), action, null);
                        }
                    }));
            }
            catch (PitayaException exc)
            {
                Logger.Error("Failed to create cluster: {0}", exc.Message);
                Environment.Exit(1);
            }

            Logger.Info("pitaya lib initialized successfully :)");

            PitayaCluster.RegisterRemote(new TestRemote());
            PitayaCluster.RegisterHandler(new TestHandler());

            TrySendRpc();

            PitayaCluster.WaitShutdownSignal();
        }
Esempio n. 19
0
        static void Main(string[] args)
        {
            Logger.SetLevel(LogLevel.DEBUG);

            Console.WriteLine("c# prog running");

            string serverId = System.Guid.NewGuid().ToString();

            SDConfig sdConfig = new SDConfig("127.0.0.1:2379", 30, "pitaya/", 30, true, 60);

            // NatsRPCClientConfig rpcClientConfig = new NatsRPCClientConfig("nats://localhost:4222", 10, 5000);
            // // TODO does it makes sense to give freedom to set reconnectionRetries and messagesBufferSize?
            // NatsRPCServerConfig rpcServerConfig = new NatsRPCServerConfig("nats://localhost:4222", 10, 75);
            // PitayaCluster.Init(
            //   sdConfig,
            //   rpcClientConfig,
            //   rpcServerConfig,
            //   new Server(
            //     serverId,
            //     "csharp",
            //     "{\"ip\":\"127.0.0.1\"}",
            //     false)
            // );

            GrpcRPCClientConfig grpcClientConfig = new GrpcRPCClientConfig(5000, 5000, "127.0.0.1:2379", "pitaya/");
            GrpcRPCServerConfig grpcServerConfig = new GrpcRPCServerConfig(5340);

            PitayaCluster.Init(
                sdConfig,
                grpcClientConfig,
                grpcServerConfig,
                new Server(
                    serverId,
                    "csharp",
                    "{\"ip\":\"127.0.0.1\",\"grpc-host\":\"127.0.0.1\",\"grpc-port\":\"5340\"}",
                    false)
                );

            PitayaCluster.ConfigureJaeger(1.0, GoString.fromString("test-svc"));

            TestRemote tr = new TestRemote();

            PitayaCluster.RegisterRemote(tr);

            // prevent from closing
            Console.ReadKey();

            Server sv = PitayaCluster.GetServer(serverId);

            Logger.Info("got server with id: {0}", sv.id);

            Protos.RPCMsg msg = new Protos.RPCMsg();
            msg.Msg = "hellow from bla";

            try{
                Protos.RPCRes res = PitayaCluster.RPC <Protos.RPCRes>(Pitaya.Route.fromString("connector.testremote.test"), msg);
                Logger.Info("received rpc res {0}", res);
            }catch (Exception e) {
                Logger.Error("deu ruim: {0}", e);
            }

            Console.ReadKey();
            PitayaCluster.Shutdown();
        }
Esempio n. 20
0
        private static void Main(string[] args)
        {
            Logger.SetLevel(LogLevel.INFO);

            var serverId = System.Guid.NewGuid().ToString();

            var sdConfig = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                heartbeatTTLSec: 60,
                logHeartbeat: true,
                logServerSync: true,
                logServerDetails: true,
                syncServersIntervalSec: 30,
                maxNumberOfRetries: 0);

            var sv = new Server(
                id: serverId,
                type: "csharp",
                metadata: "",
                hostname: "localhost",
                frontend: false);

            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 5444,
                serverShutdownDeadlineMs: 3000,
                serverMaxNumberOfRpcs: 500,
                clientRpcTimeoutMs: 10000
                );

            PitayaCluster.AddSignalHandler(() =>
            {
                Logger.Info("Calling terminate on cluster");
                PitayaCluster.Terminate();
                Logger.Info("Cluster terminated, exiting app");
                Environment.Exit(1);
            });

            PitayaCluster.RegisterHandler(new UserHandler());
            PitayaCluster.SetSerializer(new JSONSerializer()); // Using json serializer for easier interop with pitaya-cli

            try
            {
                PitayaCluster.Initialize(
                    grpcConfig,
                    sdConfig,
                    sv,
                    NativeLogLevel.Debug,
                    new PitayaCluster.ServiceDiscoveryListener((action, server) =>
                {
                    switch (action)
                    {
                    case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                        Console.WriteLine($"Server added: {server}");
                        break;

                    case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                        Console.WriteLine($"Server removed: {server}");
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(action), action, null);
                    }
                })
                    );
            }
            catch (PitayaException exc)
            {
                Logger.Error("Failed to create cluster: {0}", exc.Message);
                Environment.Exit(1);
            }

            while (true)
            {
                Thread.Sleep(10);
            }
            ////
        }
Esempio n. 21
0
 public Task <bool> Push(object pushMsg, string route)
 {
     return(PitayaCluster.SendPushToUser(_frontendId, "", route, Uid, pushMsg));
 }
Esempio n. 22
0
 public Task <bool> Push(object pushMsg, string svType, string svId, string route)
 {
     return(PitayaCluster.SendPushToUser(svId, svType, route, Uid, pushMsg));
 }