Exemple #1
0
        static void Main(string[] args)
        {
            FanoutSearchModule.EnableExternalQuery(true);
            FanoutSearchModule.SetQueryTimeout(30000);
            FanoutSearchModule.RegisterIndexService(Indexer);
            FanoutSearchModule.RegisterExpressionSerializerFactory(() => new ExpressionSerializer());
            LambdaDSL.SetDialect("MyGraph", "StartFrom", "VisitNode", "FollowEdge", "Action");

            TrinityConfig.HttpPort = 80;
            var server = new TrinityServer();

            server.RegisterCommunicationModule <FanoutSearchModule>();
            server.Start();

            if (!Trinity.Global.LocalStorage.LoadStorage() || !Trinity.Global.LocalStorage.Movie_Accessor_Selector().Any())
            {
                Trinity.Global.LocalStorage.LoadStorage();
                ImportMovieData(@"D:\MovieDomain\GraphEngineServer\bin\Debug\");
                Trinity.Global.LocalStorage.SaveStorage();
            }
            else
            {
                Console.WriteLine("=============================Movie had been imported once. Skipping this turn.");
            }
            //TestMovieData(@"D:\MovieDomain\GraphEngineServer\bin\Debug\");

            //ImportToyData();
            //PrepareSeedEntity();
        }
Exemple #2
0
        public void T1()
        {
            TrinityServer server = new TrinityServer();

            server.Start();
            Global.Uninitialize();
        }
        static void Main(string[] args)
        {
            TrinityConfig.LoggingLevel = Trinity.Diagnostics.LogLevel.Debug;
            TrinityConfig.StorageRoot  = Environment.CurrentDirectory;
            Global.LocalStorage.ResetStorage();
            TrinityServer server = new TrinityServer();

            server.Start();
            server.Stop();
            Parallel.For(0, 1000, i =>
            {
                Global.LocalStorage.SaveCell(i, new byte[i]);
            });
            Global.LocalStorage.SaveStorage();
            Global.LocalStorage.LoadStorage();

            for (int i = 0; i < 1000; ++i)
            {
                byte[] cell_content;
                Assert(TrinityErrorCode.E_SUCCESS == Global.LocalStorage.LoadCell(i, out cell_content));
                Assert(i == cell_content.Length);
            }

            // let's also assert that there are no other cells in the storage...
            for (int i = 1001; i < 10000; ++i)
            {
                Assert(!Global.LocalStorage.Contains(i));
            }

            Global.Uninitialize();
            Environment.Exit(0);
        }
Exemple #4
0
        static void Main(string[] args)
        {
            TrinityConfig.LoggingLevel = Trinity.Diagnostics.LogLevel.Debug;
            Global.LocalStorage.ResetStorage();
            TrinityServer server = new TrinityServer();

            server.Start();
            server.Stop();
            Parallel.For(0, 1000, i =>
            {
                Global.LocalStorage.SaveCell(i, new byte[i]);
            });
            Global.LocalStorage.SaveStorage();
            Global.LocalStorage.LoadStorage();

            for (int i = 0; i < 1000; ++i)
            {
                byte[] cell_content;
                Debug.Assert(TrinityErrorCode.E_SUCCESS == Global.LocalStorage.LoadCell(i, out cell_content));
                Debug.Assert(i == cell_content.Length);
            }

            Global.Uninitialize();
            Environment.Exit(0);
        }
Exemple #5
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Usage();
                return;
            }

            if (args.Length >= 2)
            {
                TrinityConfig.StorageRoot = args[1];
            }
            Global.LoadTSLStorageExtension(args[0]);
            Global.LocalStorage.LoadStorage();

            TrinityConfig.HttpPort = 80;
            FanoutSearchModule.EnableExternalQuery(true);
            FanoutSearchModule.SetQueryTimeout(3000);
            FanoutSearchModule.RegisterIndexService(Indexer);
            FanoutSearch.LambdaDSL.SetDialect("g", "v", "outV", "outE", "Action");

            TrinityServer server = new TrinityServer();

            server.RegisterCommunicationModule <FanoutSearchModule>();
            server.Start();
        }
Exemple #6
0
        static void Main(string[] args)
        {
            Console.WriteLine(typeof(PythonRuntimeProvider).Name);
            FFIConfig.Instance.ProgramDirectory = Environment.CurrentDirectory;
            Console.WriteLine(Environment.CurrentDirectory);
            TrinityServer server = new TrinityServer();

            server.Start();
        }
Exemple #7
0
        public void ModuleAutoload()
        {
            TrinityServer server = new TrinityServer();

            server.Start();

            Assert.NotNull(server.GetCommunicationModule <TrinityFFIModule>());

            server.Stop();
        }
Exemple #8
0
 public TrinityServerFixture()
 {
     Global.Initialize();
     LambdaDSL.SetDialect("MAG", "StartFrom", "VisitNode", "FollowEdge", "Action");
     FanoutSearchModule.SetQueryTimeout(-1);
     FanoutSearchModule.RegisterIndexService(FakeIndexService);
     server = new TrinityServer();
     server.RegisterCommunicationModule <FanoutSearchModule>();
     server.Start();
 }
        private static async Task Main(string[] args)
        {
            TrinityConfig.CurrentRunningMode = RunningMode.Server;
            TrinityConfig.LogEchoOnConsole   = true;
            TrinityConfig.LoggingLevel       = LogLevel.Info;

            Log.LogsWritten += Log_LogsWritten;

            TripleStoreServer = new TrinityServer();

            TripleStoreServer.RegisterCommunicationModule <TrinityClientModule>();
            TripleStoreServer.RegisterCommunicationModule <TripleModule>();
            TripleStoreServer.Start();

            TrinityClientModuleRuntime = TripleStoreServer.GetCommunicationModule <TrinityClientModule>();

            // We inject an instance of the TripleModule class object so that we hook-up to our custom sever-side code

            GraphEngineTripleModuleImpl = TripleStoreServer.GetCommunicationModule <TripleModule>();

            while (true)
            {
                // Each time we pass through the look check to see how many active clients are connected

                var tripleStoreClients = TrinityClientModuleRuntime.Clients.ToList();

                Console.WriteLine($"The number of real-time Connected TripleStore Client: {tripleStoreClients.Count}.");

                foreach (var connectedTripleStoreClient in tripleStoreClients.Where(connectedTripleStoreClient => connectedTripleStoreClient != null))
                {
                    try
                    {
                        List <Triple> triples = new List <Triple> {
                            new Triple {
                                Subject = "foo", Predicate = "is", Object = "bar"
                            }
                        };

                        // New-up the Request Message!

                        using var message = new TripleStreamWriter(triples);

                        // Push a triple to the Client

                        using var rsp = await connectedTripleStoreClient.StreamTriplesAsync(message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }

                await Task.Delay(1000).ConfigureAwait(false);
            }
        }
Exemple #10
0
        public void issue_267()
        {
            Global.Initialize("trinity.xml");
            var server = new TrinityServer();

            server.Start();

            var contains = Global.CloudStorage.Contains(0);

            Assert.False(contains);
        }
Exemple #11
0
        internal static void Initialize()
        {
            Global.Initialize();
            LambdaDSL.SetDialect("MAG", "StartFrom", "VisitNode", "FollowEdge", "Action");
            FanoutSearchModule.SetQueryTimeout(-1);
            FanoutSearchModule.RegisterIndexService(FakeIndexService);
            FanoutSearchModule.RegisterExpressionSerializerFactory(() => new ExpressionSerializer());
            TrinityServer server = new TrinityServer();

            server.RegisterCommunicationModule <FanoutSearchModule>();
            server.Start();
        }
Exemple #12
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            //TrinityConfig.ServerPort = 8081;
            TrinityConfig.HttpPort = 8080;

            TrinityServer server = new TrinityServer();

            // server.RegisterCommunicationModule<FanoutSearchModule>();
            server.Start();
        }
Exemple #13
0
        public void StartServerTwice()
        {
            TrinityServer server = new TrinityServer();

            server.Start();

            Global.Uninitialize();

            Global.Initialize();
            server.Start();
            Global.Uninitialize();
        }
Exemple #14
0
        static void Main(string[] args)
        {
            Initialize();

            //  Spawn a 'stock' Trinity server
            TrinityServer server = new TrinityServer();

            //  Plug-in the LIKQ communication module.
            server.RegisterCommunicationModule <FanoutSearchModule>();
            //  Start the server
            server.Start();
        }
Exemple #15
0
        public static void Initialize(TestContext context)
        {
            TrinityServer server = new TrinityServer();

            TrinityConfig.HttpPort     = 8080;
            TrinityConfig.ServerPort   = 7304;
            TrinityConfig.LoggingLevel = Trinity.Diagnostics.LogLevel.Debug;
            server.RegisterCommunicationModule <FanoutSearchModule>();
            server.Start();
            Console.WriteLine("Local Server started");
            Global.CloudStorage.BarrierSync();
            Console.WriteLine("All Server started");
        }
Exemple #16
0
        static void Main(string[] args)
        {
            LoadPlugins(PluginConfig.Instance);
            Global.Initialize();
            TrinityServer server = new TrinityServer();

            server.Start();

            while (true)
            {
                System.Threading.Thread.Sleep(10000);
            }
        }
Exemple #17
0
        public static void Initialize(TestContext context)
        {
            TrinityServer server = new TrinityServer();

            TrinityConfig.HttpPort     = 8080;
            TrinityConfig.ServerPort   = 7304;
            TrinityConfig.LoggingLevel = Trinity.Diagnostics.LogLevel.Debug;
            FanoutSearchModule.RegisterExpressionSerializerFactory(() => new ExpressionSerializer());
            server.RegisterCommunicationModule <FanoutSearchModule>();
            server.Start();


            Console.WriteLine("Local Server started");
            BSP.BarrierSync((FixedMemoryCloud)Global.CloudStorage);
            Console.WriteLine("All Server started");
        }
Exemple #18
0
        static void Main(string[] args)
        {
            TrinityConfig.LoggingLevel = Diagnostics.LogLevel.Debug;
            TrinityServer server = new TrinityServer();

            server.RegisterCommunicationModule <TrinityClientModule.TrinityClientModule>();
            server.RegisterCommunicationModule <TrinityClientTestModule>();
            server.Start();

            Global.LocalStorage.SaveC1(0, "foo", 123);

            var cmod = server.GetCommunicationModule <TrinityClientModule.TrinityClientModule>();
            var tmod = server.GetCommunicationModule <TrinityClientTestModule>();
            int i    = 0;

            while (true)
            {
                var client = cmod.Clients.FirstOrDefault();
                Console.WriteLine($"{cmod.Clients.Count()} clients");
                if (client != null)
                {
                    try
                    {
                        using (var msg = new S1Writer("foo", i++))
                            client.P1(msg).ContinueWith(t =>
                            {
                                using (var rsp = t.Result)
                                {
                                    Console.WriteLine($"Client responded: {rsp.foo}, {rsp.bar}");
                                }
                            }, TaskContinuationOptions.RunContinuationsAsynchronously);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                        --i;
                    }
                }
                Thread.Sleep(1000);
            }
        }
Exemple #19
0
        public void LoadsRuntime()
        {
            Global.Initialize();

            FileUtility.CompletePath(FFIConfig.Instance.ProgramDirectory, create_nonexistent: true);
            var fp = Path.Combine(FFIConfig.Instance.ProgramDirectory, "test.txt");

            File.WriteAllText(fp, " ");

            TrinityServer server = new TrinityServer();

            server.Start();

            Assert.Equal(fp, MockRuntime.s_loadprogram_called);
            Assert.Equal(1, MockRuntimeProvider_SS.s_runtime_cnt);

            server.Stop();
            Global.Uninitialize();

            Assert.Equal(true, MockRuntime.s_dispose_called);
        }
Exemple #20
0
        public void Initialize(string LogDirectory, string StorageRoot, bool LogEchoOnConsole, Trinity.Diagnostics.LogLevel LogLevel)
        {
            if (!_isInitialized)
            {
                TrinityConfig.LogEchoOnConsole      = LogEchoOnConsole;
                LoggingConfig.Instance.LogDirectory = LogDirectory;
                LoggingConfig.Instance.LoggingLevel = LogLevel;
                StorageConfig.Instance.StorageRoot  = StorageRoot;

                Global.Initialize();

                LambdaDSL.SetDialect("MAG", "StartFrom", "VisitNode", "FollowEdge", "Action");
                FanoutSearchModule.SetQueryTimeout(-1);

                TrinityServer server = new TrinityServer();
                server.RegisterCommunicationModule <FanoutSearchModule>();
                server.Start();

                _isInitialized = true;
            }
        }
Exemple #21
0
        public void LoadPythonFFI_Success()
        {
            // The test engine may trigger the initialization
            Global.Initialize();
            FileUtility.CompletePath(FFIConfig.Instance.ProgramDirectory, create_nonexistent: true);

            // try to invoke trinity-specific python code here
            var fp = Path.Combine(FFIConfig.Instance.ProgramDirectory, "test.py");

            File.WriteAllText(fp, @"
with open('MyCell.txt', 'w') as f:
    a = ge.NewCell('MyCell')
    print(a)
    f.write(a)
");
            TrinityServer server = new TrinityServer();

            server.Start();

            Global.Uninitialize();

            Assert.True(File.Exists("MyCell.txt"));
            Debug.WriteLine(File.ReadAllText("MyCell.txt"));
        }
Exemple #22
0
        /// <summary>
        /// This is the entry point of the service host process.
        /// </summary>
        private static async Task Main()
        {
            try
            {
                TrinityConfig.LogEchoOnConsole = false;
                TrinityConfig.LoggingLevel     = LogLevel.Debug;

                //TrinityConfig.StorageRoot = @"C:\GE-TripleStore-Storage";

                // The ServiceManifest.XML file defines one or more service type names.
                // Registering a service maps a service type name to a .NET type.
                // When Service Fabric creates an instance of this service type,
                // an instance of the class is created in this host process.

                GraphEngineService.StartServiceAsync("Trinity.SF.GraphEngineDataServiceType").GetAwaiter()
                .GetResult();

                // Global.Communications runtime is ready

                TripleStoreServer = Global.CommunicationInstance as TrinityServer;

                if (TripleStoreServer != null)
                {
                    Log.WriteLine(nameof(TripleModule) + " is Up, Ready and Active");

                    TripleStoreServer.Started += TripleStoreServer_Started;
                    TripleStoreServer_Started();
                }

                //Console.ReadLine();

                await Task.Delay(0).ConfigureAwait(false);

                Thread.Sleep(Timeout.Infinite);

                //GraphEngineTripleStoreDemoServerImpl =
                //    TripleStoreServer.GetCommunicationModule<TripleStoreDemoServerModule>();

                //while (true)
                //{
                //    // Each time we pass through the look check to see how many active clients are connected

                //    using var processingLoopTask = Task.Factory.StartNew(async () =>
                //    {
                //        if (GraphEngineTripleClientAPI.Clients != null)
                //        {
                //            var tripleStoreClients = GraphEngineTripleClientAPI.Clients.ToList();

                //            Console.WriteLine($"The number of real-time Connected TripleStore Client: {tripleStoreClients.Count}.");

                //            foreach (var connectedTripleStoreClient in tripleStoreClients.Where(connectedTripleStoreClient => connectedTripleStoreClient != null))
                //            {
                //                try
                //                {
                //                    List<Triple> triples = new List<Triple> { new Triple { Subject = "GraphEngineServer", Predicate = "is", Object = "Running" } };

                //                    // New-up the Request Message!

                //                    using var message = new TripleStreamWriter(triples);

                //                    // Push a triple to the Client

                //                    await connectedTripleStoreClient.StreamTriplesAsync(message).ConfigureAwait(false);
                //                }
                //                catch (Exception ex)
                //                {
                //                    Log.WriteLine(ex.ToString());
                //                }
                //            }
                //        }

                //        await Task.Delay(2000).ConfigureAwait(false);

                //    }, cancellationToken: CancellationToken.None,
                //        creationOptions: TaskCreationOptions.HideScheduler,
                //        scheduler: TaskScheduler.Current).Unwrap();

                //    var mainLoopTask = processingLoopTask;

                //    await mainLoopTask;
                //}
            }
            catch (Exception ex)
            {
                Log.WriteLine(ex.Message);
            }
        }
Exemple #23
0
        private static async Task Main(string[] args)
        {
            TrinityConfig.LoadConfig(@"D:\Trinity TripleStore Server Deployment\trinity.xml");

            //graphEngineCluster = new AvailabilityGroup()
            //{
            //    Id = "rub-truespark-ge-cluster",
            //    Instances = new List<ServerInfo>()
            //    {
            //        new ServerInfo("GenNexusPrime.inknowworks.dev.net", 9888, string.Empty, LogLevel.Verbose),
            //        new ServerInfo("metagengraph-a.inknowworks.dev.net", 9888, string.Empty, LogLevel.Verbose),
            //        new ServerInfo("metagengraph-b.inknowworks.dev.net", 9888, string.Empty, LogLevel.Verbose)
            //        //new ServerInfo("truesparksf03.inknowworks.dev.net", 7808, string.Empty, LogLevel.Verbose),
            //        //new ServerInfo("truesparksf04.inknowworks.dev.net", 7808, string.Empty, LogLevel.Verbose),
            //        //new ServerInfo("truesparksf05.inknowworks.dev.net", 7808, string.Empty, LogLevel.Verbose)
            //    }
            //};

            TrinityConfig.LoggingLevel = LogLevel.Debug;
            //TrinityConfig.Servers.Add(graphEngineCluster);
            //TrinityConfig.CurrentRunningMode = RunningMode.Server;
            //TrinityConfig.AddServer(TripleStoreServerInfo);
            //TrinityConfig.LogEchoOnConsole = true;
            //TrinityConfig.StorageRoot = TripleStoreStorageRoot;

            //Log.LogsWritten += Log_LogsWritten;

            TripleStoreServer = new TrinityServer();

            var registeredModuleTypes = TripleStoreServer.GetRegisteredCommunicationModuleTypes();

            var moduleTypes = registeredModuleTypes as Type[] ?? registeredModuleTypes.ToArray();

            if (!moduleTypes.Contains(typeof(TrinityClientModule)))
            {
                TripleStoreServer.RegisterCommunicationModule <TrinityClientModule>();
            }

            if (!moduleTypes.Contains(typeof(TripleModule)))
            {
                TripleStoreServer.RegisterCommunicationModule <TripleModule>();
            }

            //TripleStoreServer.Started += TripleStoreServer_Started;
            //TripleStoreServer.RegisterCommunicationModule<TripleStoreDemoServerModule>();

            TripleStoreServer.Start();

            //Global.CloudStorage.ResetStorage();
            //Global.LocalStorage.ResetStorage();

            //Global.LocalStorage.LoadStorage();

            GraphEngineTripleClientAPI = TripleStoreServer.GetCommunicationModule <TrinityClientModule>();

            // We inject an instance of the TripleModule class object so that we hook-up to our custom sever-side code

            GraphEngineTripleServerAPI = TripleStoreServer.GetCommunicationModule <TripleModule>();

            if (GraphEngineTripleServerAPI != null)
            {
                Log.WriteLine("Setup Reactive Event Stream Processing!");

                GraphEngineTripleServerAPI.TriplePostedToServerReceivedAction
                .ObserveOn(GraphEngineTripleServerAPI.ObserverOnNewThreadScheduler)
                .Do(onNext: subscriberSource =>
                {
                    var msg = "TriplePostedToServerReceivedAction-1";
                    Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg, Thread.CurrentThread.ManagedThreadId);
                })
                .SubscribeOn(GraphEngineTripleServerAPI.SubscribeOnEventLoopScheduler)
                .Subscribe(onNext: async tripleFromClient =>
                {
                    using var graphEngineResponseTask = Task.Factory.StartNew(async() =>
                    {
                        //await Task.Yield();

                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine($"Processing Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
                        Log.WriteLine($"Triple Received from Client has been saved Received.");
                        Log.WriteLine($"Triple Subject Node  : {tripleFromClient.Subject}");
                        Log.WriteLine($"Triple Predicate Node: {tripleFromClient.Predicate}");
                        Log.WriteLine($"Triple Object Node   : {tripleFromClient.Object}");
                    }, cancellationToken: CancellationToken.None,
                                                                              creationOptions: TaskCreationOptions.HideScheduler,
                                                                              scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                    {
                        await Task.Delay(0);

                        Log.WriteLine("Task TriplePostedToServerReceivedAction Complete...");
                    }, cancellationToken: CancellationToken.None);

                    var writeToConsoleTask = graphEngineResponseTask;

                    await writeToConsoleTask;
                });

                // Reactive Event: ServerStreamedTripleSavedToMemoryCloudAction
                // Description: Setup Reactive Subscription on Cold Observable. Logic is trigger/executed whenever
                // a client call RPC Method "PostTripleToServer."

                GraphEngineTripleServerAPI.ServerStreamedTripleSavedToMemoryCloudAction
                .ObserveOn(GraphEngineTripleServerAPI.ObserverOnNewThreadScheduler)
                .Do(onNext: subscriberSource =>
                {
                    var msg = "ServerStreamedTripleSavedToMemoryCloudAction-1";
                    Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                  Thread.CurrentThread.ManagedThreadId);
                })
                .SubscribeOn(GraphEngineTripleServerAPI.SubscribeOnEventLoopScheduler)
                .Subscribe(onNext: async savedTriple =>
                {
                    using var graphEngineResponseTask = Task.Factory.StartNew(async() =>
                    {
                        //await Task.Yield();

                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine($"Processing Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
                        Log.WriteLine($"Triple Streamed to Pushed Client has been saved to MemoryCloud.");
                        Log.WriteLine($"TripleStore CellID   : {savedTriple.NewTripleStore.CellId}");
                        Log.WriteLine($"Triple Subject Node  : {savedTriple.NewTripleStore.TripleCell.Subject}");
                        Log.WriteLine($"Triple Predicate Node: {savedTriple.NewTripleStore.TripleCell.Predicate}");
                    }, cancellationToken: CancellationToken.None,
                                                                              creationOptions: TaskCreationOptions.HideScheduler,
                                                                              scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                    {
                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Task ServerStreamedTripleSavedToMemoryCloudAction Complete...");
                    }, cancellationToken: CancellationToken.None);

                    var writeToConsoleTask = graphEngineResponseTask;

                    await writeToConsoleTask;
                });

                // ClientPostedTripleStoreReadyInMemoryCloudAction

                GraphEngineTripleServerAPI.ClientPostedTripleStoreReadyInMemoryCloudAction
                .ObserveOn(GraphEngineTripleServerAPI.ObserverOnNewThreadScheduler)
                .Do(onNext: subscriberSource =>
                {
                    var msg = "ClientPostedTripleStoreReadyInMemoryCloudAction-1";
                    Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                  Thread.CurrentThread.ManagedThreadId);
                })
                .SubscribeOn(GraphEngineTripleServerAPI.SubscribeOnEventLoopScheduler)
                .Synchronize()
                .Subscribe(onNext: async tripleObject =>
                {
                    using var getTripleByCellIdTask = Task.Factory.StartNew(async() =>
                    {
                        // await Task.Yield();
                        await Task.Delay(0).ConfigureAwait(false);

                        var isLocalCell = Global.CloudStorage.IsLocalCell(tripleObject.CellId);

                        if (isLocalCell)
                        {
                            Log.WriteLine($"Found TripleStore Object: {tripleObject.CellId} in Local MemoryCloud!");

                            using var getRequest = new TripleGetRequestWriter()
                                  {
                                      TripleCellId = tripleObject.CellId,
                                      Subject      = tripleObject.TripleCell.Subject,
                                      Predicate    = tripleObject.TripleCell.Predicate,
                                      Namespace    = tripleObject.TripleCell.Namespace,
                                      Object       = tripleObject.TripleCell.Object
                                  };

                            Log.WriteLine($"Make Client-Side call from Server-side: GetTripleByCellId.");

                            await GraphEngineTripleServerAPI.GetTripleByCellId(0, getRequest).ConfigureAwait(false);
                        }
                    }, cancellationToken: CancellationToken.None,
                                                                            creationOptions: TaskCreationOptions.HideScheduler,
                                                                            scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                    {
                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Task ClientPostedTripleStoreReadyInMemoryCloudAction Complete...");
                    }, cancellationToken: CancellationToken.None);

                    var writeToConsoleTask = getTripleByCellIdTask;

                    await writeToConsoleTask;
                });

                // Reactive: ClientPostedTripleStoreReadyInMemoryCloudHotAction

                GraphEngineTripleServerAPI.ClientPostedTripleStoreReadyInMemoryCloudHotAction
                .ObserveOn(GraphEngineTripleServerAPI.HotObservableSchedulerContext)
                .Do(onNext: subscriberSource =>
                {
                    var msg = "ClientPostedTripleStoreReadyInMemoryCloudHotAction-1";
                    Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                  Thread.CurrentThread.ManagedThreadId);
                })
                .SubscribeOn(GraphEngineTripleServerAPI.HotObservableSchedulerContext)
                .Synchronize()
                .Subscribe(onNext: async tripleObject =>
                {
                    using var getTripleByCellIdTask = Task.Factory.StartNew(async() =>
                    {
                        // await Task.Yield();
                        await Task.Delay(0).ConfigureAwait(false);

                        //using var getRequest = new TripleGetRequestWriter()
                        //{
                        //    TripleCellId = tripleObject.CellId,
                        //    Subject = tripleObject.TripleCell.Subject,
                        //    Predicate = tripleObject.TripleCell.Predicate,
                        //    Namespace = tripleObject.TripleCell.Namespace,
                        //    Object = tripleObject.TripleCell.Object
                        //};

                        //await GraphEngineTripleServerAPI.GetTripleByCellId(0, getRequest).ConfigureAwait(false);

                        var isLocalCell = Global.CloudStorage.IsLocalCell(tripleObject.CellId);

                        if (isLocalCell)
                        {
                            Log.WriteLine($"Found TripleStore Object: {tripleObject.CellId} in Local MemoryCloud!");

                            using var getRequest = new TripleGetRequestWriter()
                                  {
                                      TripleCellId = tripleObject.CellId,
                                      Subject      = tripleObject.TripleCell.Subject,
                                      Predicate    = tripleObject.TripleCell.Predicate,
                                      Namespace    = tripleObject.TripleCell.Namespace,
                                      Object       = tripleObject.TripleCell.Object
                                  };

                            Log.WriteLine($"Make Client-Side call from Server-side: GetTripleByCellId.");

                            await GraphEngineTripleServerAPI
                            .GetTripleByCellId(0, getRequest).ConfigureAwait(false);
                        }
                    }, cancellationToken: CancellationToken.None,
                                                                            creationOptions: TaskCreationOptions.HideScheduler,
                                                                            scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                    {
                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Task ClientPostedTripleStoreReadyInMemoryCloudHotAction Complete...");
                    }, cancellationToken: CancellationToken.None);

                    var writeToConsoleTask = getTripleByCellIdTask;

                    await writeToConsoleTask;
                });

                GraphEngineTripleServerAPI.ClientPostedTripleStoreReadyInMemoryCloudHotAction.Connect();

                GraphEngineTripleServerAPI.TripleByCellIdReceivedAction
                .ObserveOn(GraphEngineTripleServerAPI.ObserverOnNewThreadScheduler)
                .Do(onNext: subscriberSource =>
                {
                    var msg = "TripleByCellIdReceivedAction-1";
                    Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                  Thread.CurrentThread.ManagedThreadId);
                })
                .SubscribeOn(GraphEngineTripleServerAPI.SubscribeOnEventLoopScheduler)
                .Synchronize()
                .Subscribe(onNext: async tripleObjectFromGetRequest =>
                {
                    using var getTripleBySubjectTask = Task.Factory.StartNew(async() =>
                    {
                        //await Task.Yield();

                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Reactive Async - Server-Side Get Request on behalf of the Client.");
                        Log.WriteLine($"Processing Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
                        Log.WriteLine($"Triple Object CellID : {tripleObjectFromGetRequest.CellId}.");
                        Log.WriteLine($"Triple Subject Node  : {tripleObjectFromGetRequest.TripleCell.Subject}");
                        Log.WriteLine($"Triple Predicate Node: {tripleObjectFromGetRequest.TripleCell.Predicate}");
                        Log.WriteLine($"Triple Object Node   : {tripleObjectFromGetRequest.TripleCell.Object}.");
                    }, cancellationToken: CancellationToken.None,
                                                                             creationOptions: TaskCreationOptions.HideScheduler,
                                                                             scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                    {
                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Task TripleByCellIdReceivedAction Complete...");
                    }, cancellationToken: CancellationToken.None);

                    var writeToConsoleTask = getTripleBySubjectTask;

                    await writeToConsoleTask;
                });

                GraphEngineTripleServerAPI.ClientPostedTripleSavedToMemoryCloudAction
                .ObserveOn(GraphEngineTripleServerAPI.ObserverOnNewThreadScheduler)
                .Do(onNext: subscriberSource =>
                {
                    var msg = "ClientPostedTripleSavedToMemoryCloudAction-1";
                    Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                  Thread.CurrentThread.ManagedThreadId);
                })
                .SubscribeOn(GraphEngineTripleServerAPI.SubscribeOnEventLoopScheduler)
                .Synchronize()
                .Subscribe(onNext: async tripleStoreMemoryContext =>
                {
                    using var reactToTriplePostedSavedToMemoryCloudTask = Task.Factory.StartNew(async() =>
                    {
                        //await Task.Yield();

                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Success! Found the Triple in the TripleStore MemoryCloud");

                        var tripleStore   = tripleStoreMemoryContext.NewTripleStore;
                        var subjectNode   = tripleStore.TripleCell.Subject;
                        var predicateNode = tripleStore.TripleCell.Predicate;
                        var objectNode    = tripleStore.TripleCell.Object;

                        Log.WriteLine($"Triple CellId in MemoryCloud: {tripleStoreMemoryContext.NewTripleStore.CellId}");
                        Log.WriteLine($"Subject Node: {subjectNode}");
                        Log.WriteLine($"Predicate Node: {predicateNode}");
                        Log.WriteLine($"Object Node: {objectNode}");
                    }, cancellationToken: CancellationToken.None,
                                                                                                creationOptions: TaskCreationOptions.HideScheduler,
                                                                                                scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                    {
                        await Task.Delay(0).ConfigureAwait(false);

                        Log.WriteLine("Task ClientPostedTripleSavedToMemoryCloudAction Complete...");
                    }, cancellationToken: CancellationToken.None);

                    var storeFromMemoryCloudTask = reactToTriplePostedSavedToMemoryCloudTask;

                    await storeFromMemoryCloudTask;
                });
            }

            //Console.ReadLine();

            Log.WriteLine("Graph Engine Server is up, running and waiting to client connections");

            //Thread.Sleep(Timeout.Infinite);

            //GraphEngineTripleStoreDemoServerImpl =
            //    TripleStoreServer.GetCommunicationModule<TripleStoreDemoServerModule>();

            while (true)
            {
                // Each time we pass through the look check to see how many active clients are connected

                using var processingLoopTask = Task.Factory.StartNew(async() =>
                {
                    if (GraphEngineTripleClientAPI.Clients.Any())
                    {
                        var tripleStoreClients = GraphEngineTripleClientAPI.Clients.ToList();

                        Log.WriteLine($"The number of real-time Connected TripleStore Client: {tripleStoreClients.Count}.");

                        foreach (var connectedTripleStoreClient in tripleStoreClients.Where(connectedTripleStoreClient => connectedTripleStoreClient != null))
                        {
                            try
                            {
                                List <Triple> triples = new List <Triple> {
                                    new Triple {
                                        Subject = "GraphEngineServer", Predicate = "is", Object = "Running"
                                    }
                                };

                                // New-up the Request Message!

                                using var message = new TripleStreamWriter(triples);

                                // Push a triple to the Client

                                await connectedTripleStoreClient.StreamTriplesAsync(message).ConfigureAwait(false);
                            }
                            catch (Exception ex)
                            {
                                Log.WriteLine(ex.ToString());
                            }
                        }
                    }

                    await Task.Delay(1000).ConfigureAwait(false);
                }, cancellationToken: CancellationToken.None,
                                                                     creationOptions: TaskCreationOptions.HideScheduler,
                                                                     scheduler: TaskScheduler.Current).Unwrap();

                var mainLoopTask = processingLoopTask;

                await mainLoopTask;
            }
        }
Exemple #24
0
        static void Main(string[] args)
        {
            TrinityConfig.LoggingLevel       = Trinity.Diagnostics.LogLevel.Debug;
            TrinityConfig.LogEchoOnConsole   = true;
            TrinityConfig.LogToFile          = true;
            TrinityConfig.CurrentRunningMode = RunningMode.Server;
            TrinityConfig.ClientMaxConn      = 1;

            TrinityServer server = new TrinityServer();

            server.RegisterCommunicationModule <TrinityClientModule>();
            server.RegisterCommunicationModule <TripleStoreServiceModule>();

            server.Start();

            var myTriple =
                new Triple()
            {
                GraphInstance = 0,
                Url           = "http://www.inknowworks.semanticweb.ontology/persongraph",
                HashCode      = Trinity.Core.Lib.HashHelper.HashString2Int64(Guid.NewGuid().ToString()),
                Nodes         = new List <INode>()
                {
                    new INode()
                    {
                        GraphParent = Trinity.Core.Lib.CellIdFactory.NewCellId(),
                        GraphUri    = "http://www.inknowworks.semanticweb.ontology/persongraph",
                        HashCode    = Trinity.Core.Lib.HashHelper.HashString2Int64("http://www.inknowworks.semanticweb.ontology/persongraph"),
                        TypeOfNode  = NodeType.GraphLiteral
                    }
                },
                ObjectNode = new INode()
                {
                    GraphParent = 0,
                    GraphUri    = "http://www.inknowworks.semanticweb.ontology/persongraph",
                    HashCode    = Trinity.Core.Lib.HashHelper.HashString2Int64(Guid.NewGuid().ToString()),
                    TripleType  = TripleSegmentPart.Object,
                    TypeOfNode  = NodeType.Literal,
                },
                SubjectNode = new INode()
                {
                    GraphParent = 0,
                    GraphUri    = "http://www.inknowworks.semanticweb.ontology/persongraph",
                    HashCode    = Trinity.Core.Lib.HashHelper.HashString2Int64(Guid.NewGuid().ToString()),
                    TripleType  = TripleSegmentPart.Subject,
                    TypeOfNode  = NodeType.GraphLiteral
                },
                PredicateNode = new INode()
                {
                    GraphParent = 0,
                    GraphUri    = "http://www.inknowworks.semanticweb.ontology/persongraph",
                    HashCode    = Trinity.Core.Lib.HashHelper.HashString2Int64(Guid.NewGuid().ToString()),
                    TripleType  = TripleSegmentPart.Predicate,
                    TypeOfNode  = NodeType.Literal,
                }
            };

            var tripleCollection = new List <Triple> {
                myTriple
            };

            // New up a Graph Entity

            Graph myGraph = new Graph()
            {
                BaseUri          = "http://www.inknowworks.semanticweb.ontology/",
                CellId           = Trinity.Core.Lib.CellIdFactory.NewCellId(),
                TripleCollection = tripleCollection
            };

            myTriple.GraphInstance = myGraph.CellId;

            Global.CloudStorage.SaveGraph(myGraph);

            //int i = 0;

            //while (true)
            //{
            //    var client = clientModule.Clients.FirstOrDefault();

            //    Console.WriteLine($"{clientModule.Clients.Count()} clients");

            //    // Test to see if Client has connected

            //    if (client != null)
            //    {
            //        try
            //        {
            //            using (var msg = new S1Writer("foo", i++))
            //                client.P1(msg).ContinueWith(t =>
            //                {
            //                    using (var rsp = t.Result)
            //                    {
            //                        Console.WriteLine($"Client responded: {rsp.foo}, {rsp.bar}");
            //                    }
            //                }, TaskContinuationOptions.RunContinuationsAsynchronously);
            //        }
            //        catch (Exception ex)
            //        {
            //            Console.WriteLine(ex.ToString());
            //            --i;
            //        }
            //    }
            //    Thread.Sleep(1000);
            //}

            //var clientModule = server.GetCommunicationModule<TrinityClientModule>();
            //var tripleStoreServiceModule = server.GetCommunicationModule<TripleStoreServiceModule>();

            while (true)
            {
                Thread.Sleep(1000000);
            }
        }
Exemple #25
0
        /// <summary>
        /// This is the entry point of the service host process.
        /// </summary>
        private static async Task Main()
        {
            try
            {
                //TrinityConfig.LogEchoOnConsole = false;
                TrinityConfig.LoggingLevel = LogLevel.Debug;
                //TrinityConfig.StorageRoot = @"C:\GE-TripleStore-Storage";

                // The ServiceManifest.XML file defines one or more service type names.
                // Registering a service maps a service type name to a .NET type.
                // When Service Fabric creates an instance of this service type,
                // an instance of the class is created in this host process.

                GraphEngineService.StartServiceAsync("Stateful.TripleStore.GraphDataServiceType").GetAwaiter()
                .GetResult();

                Log.WriteLine(nameof(TripleModule) + " is Up, Ready and Active");

                // Global.Communications runtime is ready

                if (Global.CommunicationInstance != null)
                {
                    TripleStoreServer = Global.CommunicationInstance as TrinityServer;
                }

                if (TripleStoreServer != null)
                {
                    //Global.LocalStorage.LoadStorage();

                    TripleStoreServer.RegisterCommunicationModule <TrinityClientModule>();
                    TripleStoreServer.RegisterCommunicationModule <TripleModule>();

                    TrinityClientModuleRuntime = TripleStoreServer.GetCommunicationModule <TrinityClientModule>();

                    // We inject an instance of the TripleModule class object so that we hook-up to our custom sever-side code

                    GraphEngineTripleModuleImpl = TripleStoreServer.GetCommunicationModule <TripleModule>();
                }

                if (GraphEngineTripleModuleImpl != null)
                {
                    Log.WriteLine("Setup Reactive Event Stream Processing!");

                    GraphEngineTripleModuleImpl.TriplePostedToServerReceivedAction
                    .ObserveOn(GraphEngineTripleModuleImpl.ObserverOnNewThreadScheduler)
                    .Do(onNext: subscriberSource =>
                    {
                        var msg = "TriplePostedToServerReceivedAction-1";
                        Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg, Thread.CurrentThread.ManagedThreadId);
                    })
                    .SubscribeOn(GraphEngineTripleModuleImpl.SubscribeOnEventLoopScheduler)
                    .Subscribe(onNext: async tripleFromClient =>
                    {
                        using var graphEngineResponseTask = Task.Factory.StartNew(async() =>
                        {
                            //await Task.Yield();

                            await Task.Delay(0).ConfigureAwait(false);

                            Log.WriteLine(
                                $"Processing Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
                            Log.WriteLine($"Triple Received from Client has been saved Received.");
                            Log.WriteLine($"Triple Subject Node: {tripleFromClient.Subject}");
                            Log.WriteLine($"Triple Predicate Node: {tripleFromClient.Predicate}");
                            Log.WriteLine($"Triple Object Node: {tripleFromClient.Object}");
                        }, cancellationToken: CancellationToken.None,
                                                                                  creationOptions: TaskCreationOptions.HideScheduler,
                                                                                  scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                        {
                            await Task.Delay(0);

                            var msg = "TriplePostedToServerReceivedAction-1";
                            Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                          Thread.CurrentThread.ManagedThreadId);

                            Log.WriteLine("Task TriplePostedToServerReceivedAction Complete...");
                        }, cancellationToken: CancellationToken.None);

                        var writeToConsoleTask = graphEngineResponseTask;

                        await writeToConsoleTask;
                    });

                    GraphEngineTripleModuleImpl.ServerStreamedTripleSavedToMemoryCloudAction
                    .ObserveOn(GraphEngineTripleModuleImpl.ObserverOnNewThreadScheduler)
                    .Do(onNext: subscriberSource =>
                    {
                        var msg = "ServerStreamedTripleSavedToMemoryCloudAction-1";
                        Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                      Thread.CurrentThread.ManagedThreadId);
                    })
                    .SubscribeOn(GraphEngineTripleModuleImpl.SubscribeOnEventLoopScheduler)
                    .Subscribe(onNext: async savedTriple =>
                    {
                        using var graphEngineResponseTask = Task.Factory.StartNew(async() =>
                        {
                            //await Task.Yield();

                            await Task.Delay(0).ConfigureAwait(false);

                            Log.WriteLine(
                                $"Processing Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
                            Log.WriteLine($"Triple Streamed to Pushed Client has been saved to MemoryCloud.");
                            Log.WriteLine($"TripleStore CellID: {savedTriple.NewTripleStore.CellId}");
                            Log.WriteLine($"Triple Subject Node: {savedTriple.NewTripleStore.TripleCell.Subject}");
                            Log.WriteLine(
                                $"Triple Predicate Node: {savedTriple.NewTripleStore.TripleCell.Predicate}");
                        }, cancellationToken: CancellationToken.None,
                                                                                  creationOptions: TaskCreationOptions.HideScheduler,
                                                                                  scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                        {
                            await Task.Delay(0);

                            Log.WriteLine("Task ServerStreamedTripleSavedToMemoryCloudAction Complete...");
                        }, cancellationToken: CancellationToken.None);

                        var writeToConsoleTask = graphEngineResponseTask;

                        await writeToConsoleTask;
                    });

                    // ClientPostedTripleStoreReadyInMemoryCloudAction

                    GraphEngineTripleModuleImpl.ClientPostedTripleStoreReadyInMemoryCloudAction
                    .ObserveOn(GraphEngineTripleModuleImpl.ObserverOnNewThreadScheduler)
                    .Do(onNext: subscriberSource =>
                    {
                        var msg = "ClientPostedTripleStoreReadyInMemoryCloudAction-1";
                        Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                      Thread.CurrentThread.ManagedThreadId);
                    })
                    .SubscribeOn(GraphEngineTripleModuleImpl.SubscribeOnEventLoopScheduler)
                    .Synchronize()
                    .Subscribe(onNext: async tripleObject =>
                    {
                        using var getTripleByCellIdTask = Task.Factory.StartNew(async() =>
                        {
                            //var t = Global.CloudStorage.IsLocalCell(tripleObject.CellId);

                            // await Task.Yield();
                            await Task.Delay(0).ConfigureAwait(false);

                            using var getRequest = new TripleGetRequestWriter()
                                  {
                                      TripleCellId = tripleObject.CellId,
                                      Subject      = tripleObject.TripleCell.Subject,
                                      Predicate    = tripleObject.TripleCell.Predicate,
                                      Namespace    = tripleObject.TripleCell.Namespace,
                                      Object       = tripleObject.TripleCell.Object
                                  };

                            await GraphEngineTripleModuleImpl.GetTripleByCellId(0, getRequest).ConfigureAwait(false);
                        }, cancellationToken: CancellationToken.None,
                                                                                creationOptions: TaskCreationOptions.HideScheduler,
                                                                                scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                        {
                            await Task.Delay(0);

                            Log.WriteLine("Task ClientPostedTripleStoreReadyInMemoryCloudAction Complete...");
                        }, cancellationToken: CancellationToken.None);

                        var writeToConsoleTask = getTripleByCellIdTask;

                        await writeToConsoleTask;
                    });

                    // Reactive: ClientPostedTripleStoreReadyInMemoryCloudHotAction

                    GraphEngineTripleModuleImpl.ClientPostedTripleStoreReadyInMemoryCloudHotAction
                    .ObserveOn(GraphEngineTripleModuleImpl.HotObservableSchedulerContext)
                    .Do(onNext: subscriberSource =>
                    {
                        var msg = "ClientPostedTripleStoreReadyInMemoryCloudHotAction-1";
                        Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                      Thread.CurrentThread.ManagedThreadId);
                    })
                    .SubscribeOn(GraphEngineTripleModuleImpl.HotObservableSchedulerContext)
                    .Synchronize()
                    .Subscribe(onNext: async tripleObject =>
                    {
                        using var getTripleByCellIdTask = Task.Factory.StartNew(async() =>
                        {
                            // await Task.Yield();
                            await Task.Delay(0).ConfigureAwait(false);

                            using var getRequest = new TripleGetRequestWriter()
                                  {
                                      TripleCellId = tripleObject.CellId,
                                      Subject      = tripleObject.TripleCell.Subject,
                                      Predicate    = tripleObject.TripleCell.Predicate,
                                      Namespace    = tripleObject.TripleCell.Namespace,
                                      Object       = tripleObject.TripleCell.Object
                                  };

                            await GraphEngineTripleModuleImpl.GetTripleByCellId(0, getRequest).ConfigureAwait(false);
                        }, cancellationToken: CancellationToken.None,
                                                                                creationOptions: TaskCreationOptions.HideScheduler,
                                                                                scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                        {
                            await Task.Delay(0);

                            Log.WriteLine("Task ClientPostedTripleStoreReadyInMemoryCloudAction Complete...");
                        }, cancellationToken: CancellationToken.None);

                        var writeToConsoleTask = getTripleByCellIdTask;

                        await writeToConsoleTask;
                    });

                    GraphEngineTripleModuleImpl.ClientPostedTripleStoreReadyInMemoryCloudHotAction.Connect();

                    GraphEngineTripleModuleImpl.TripleByCellIdReceivedAction
                    .ObserveOn(GraphEngineTripleModuleImpl.ObserverOnNewThreadScheduler)
                    .Do(onNext: subscriberSource =>
                    {
                        var msg = "TripleByCellIdReceivedAction-1";
                        Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                      Thread.CurrentThread.ManagedThreadId);
                    })
                    .SubscribeOn(GraphEngineTripleModuleImpl.SubscribeOnEventLoopScheduler)
                    .Synchronize()
                    .Subscribe(onNext: async tripleObjectFromGetRequest =>
                    {
                        using var getTripleBySubjectTask = Task.Factory.StartNew(async() =>
                        {
                            //await Task.Yield();

                            await Task.Delay(0).ConfigureAwait(false);


                            Log.WriteLine(
                                "Reactive Async - Parallel-Tasking return from Server-Side Get Request on behalf of the Client.");
                            Log.WriteLine(
                                $"Processing Timestamp: {DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
                            Log.WriteLine($"Triple Object CellID: {tripleObjectFromGetRequest.CellId}.");
                            Log.WriteLine(
                                $"Triple Subject Node: {tripleObjectFromGetRequest.TripleCell.Subject}");
                            Log.WriteLine(
                                $"Triple Predicate Node: {tripleObjectFromGetRequest.TripleCell.Predicate}");
                            Log.WriteLine(
                                $"Triple Object Node: {tripleObjectFromGetRequest.TripleCell.Object}.");
                        }, cancellationToken: CancellationToken.None,
                                                                                 creationOptions: TaskCreationOptions.HideScheduler,
                                                                                 scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                        {
                            await Task.Delay(0);

                            Log.WriteLine("Task TripleByCellIdReceivedAction Complete...");
                        }, cancellationToken: CancellationToken.None);

                        var writeToConsoleTask = getTripleBySubjectTask;

                        await writeToConsoleTask;
                    });

                    GraphEngineTripleModuleImpl.ClientPostedTripleSavedToMemoryCloudAction
                    .ObserveOn(GraphEngineTripleModuleImpl.ObserverOnNewThreadScheduler)
                    .Do(onNext: subscriberSource =>
                    {
                        var msg = "ClientPostedTripleSavedToMemoryCloudAction-1";
                        Log.WriteLine("{0} Subscription happened on this Thread: {1}", msg,
                                      Thread.CurrentThread.ManagedThreadId);
                    })
                    .SubscribeOn(GraphEngineTripleModuleImpl.SubscribeOnEventLoopScheduler)
                    .Synchronize()
                    .Subscribe(onNext: async tripleStoreMemoryContext =>
                    {
                        using var reactToTriplePostedSavedToMemoryCloudTask = Task.Factory.StartNew(async() =>
                        {
                            //await Task.Yield();

                            await Task.Delay(0).ConfigureAwait(false);

                            Log.WriteLine("Success! Found the Triple in the TripleStore MemoryCloud");

                            var tripleStore   = tripleStoreMemoryContext.NewTripleStore;
                            var subjectNode   = tripleStore.TripleCell.Subject;
                            var predicateNode = tripleStore.TripleCell.Predicate;
                            var objectNode    = tripleStore.TripleCell.Object;

                            Log.WriteLine(
                                $"Triple CellId in MemoryCloud: {tripleStoreMemoryContext.NewTripleStore.CellId}");
                            Log.WriteLine($"Subject Node: {subjectNode}");
                            Log.WriteLine($"Predicate Node: {predicateNode}");
                            Log.WriteLine($"Object Node: {objectNode}");
                        }, cancellationToken: CancellationToken.None,
                                                                                                    creationOptions: TaskCreationOptions.HideScheduler,
                                                                                                    scheduler: TaskScheduler.Current).Unwrap().ContinueWith(async _ =>
                        {
                            await Task.Delay(0);

                            Log.WriteLine("Task ClientPostedTripleSavedToMemoryCloudAction Complete...");
                        }, cancellationToken: CancellationToken.None);

                        var storeFromMemoryCloudTask = reactToTriplePostedSavedToMemoryCloudTask;

                        await storeFromMemoryCloudTask;
                    });
                }


                //Console.ReadLine();

                await Task.Delay(0).ConfigureAwait(false);

                Thread.Sleep(Timeout.Infinite);

                //GraphEngineTripleStoreDemoServerImpl =
                //    TripleStoreServer.GetCommunicationModule<TripleStoreDemoServerModule>();

                //while (true)
                //{
                //    // Each time we pass through the look check to see how many active clients are connected

                //    using var processingLoopTask = Task.Factory.StartNew(async () =>
                //    {
                //        if (TrinityClientModuleRuntime.Clients != null)
                //        {
                //            var tripleStoreClients = TrinityClientModuleRuntime.Clients.ToList();

                //            Log.WriteLine($"The number of real-time Connected TripleStore Client: {tripleStoreClients.Count}.");

                //            foreach (var connectedTripleStoreClient in tripleStoreClients.Where(connectedTripleStoreClient => connectedTripleStoreClient != null))
                //            {
                //                try
                //                {
                //                    List<Triple> triples = new List<Triple> { new Triple { Subject = "GraphEngineServer", Predicate = "is", Object = "Running" } };

                //                    // New-up the Request Message!

                //                    using var message = new TripleStreamWriter(triples);

                //                    // Push a triple to the Client

                //                    await connectedTripleStoreClient.StreamTriplesAsync(message).ConfigureAwait(false);
                //                }
                //                catch (Exception ex)
                //                {
                //                    Log.WriteLine(ex.ToString());
                //                }
                //            }
                //        }

                //        await Task.Delay(2000).ConfigureAwait(false);

                //    }, cancellationToken: CancellationToken.None,
                //        creationOptions: TaskCreationOptions.HideScheduler,
                //        scheduler: TaskScheduler.Current).Unwrap();

                //    var mainLoopTask = processingLoopTask;

                //    await mainLoopTask;
                //}
            }
            catch (Exception ex)
            {
                Log.WriteLine(ex.Message);
            }
        }