Exemplo n.º 1
0
        public EffectCompilerServerSession(SessionViewModel session)
        {
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }

            this.session    = session;
            this.dispatcher = session.ServiceProvider.Get <IDispatcherService>();

            routerLaunchedTask = Task.Run(() =>
            {
                RouterHelper.EnsureRouterLaunched();
            });

            TrackPackages(session.LocalPackages);
            session.LocalPackages.CollectionChanged += LocalPackages_CollectionChanged;

            session.ImportEffectLogCommand = new AnonymousCommand(session.ServiceProvider, () =>
            {
                if (session.CurrentProject != null)
                {
                    ImportEffectLog(session.CurrentProject);
                }
            }, () => session.CurrentProject?.Package != null);
        }
Exemplo n.º 2
0
        public EffectCompilerServerSession(SessionViewModel session)
        {
            if (session == null)
            {
                throw new ArgumentNullException(nameof(session));
            }

            this.session    = session;
            this.dispatcher = session.ServiceProvider.Get <IDispatcherService>();

            routerLaunchedTask = Task.Run(() =>
            {
                var xenkoDir        = Environment.GetEnvironmentVariable("XenkoDir");
                bool isDevDirectory = DirectoryHelper.IsRootDevDirectory(xenkoDir);
                RouterHelper.EnsureRouterLaunched(isDevDirectory);
            });

            TrackPackages(session.LocalPackages);
            session.LocalPackages.CollectionChanged += LocalPackages_CollectionChanged;

            session.ImportEffectLogCommand = new AnonymousCommand(session.ServiceProvider, () =>
            {
                if (session.CurrentPackage != null)
                {
                    ImportEffectLog(session.CurrentPackage);
                }
            }, () => session.CurrentPackage != null);
        }
Exemplo n.º 3
0
        public UIRouterConfig GetFormatConfig()
        {
            UIRouterConfig result = new UIRouterConfig();

            //format ui router
            if (null != this.UIRouter && this.UIRouter.Count > 0)
            {
                foreach (var router in this.UIRouter)
                {
                    var uirouter = RouterHelper.FormatStaticUIRouter(router.Key);
                    var filePath = router.Value;
                    if (!Path.IsPathRooted(filePath))
                    {
                        filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filePath);
                    }

                    result.UIRouter.Add(uirouter, filePath);
                }
            }

            //format log router
            if (!string.IsNullOrWhiteSpace(this.LogRouter))
            {
                result.LogRouter = RouterHelper.FormatWebApiRouter(this.LogRouter);
            }

            //format log handler
            if (null != this.LogHandler)
            {
                result.LogHandler = this.LogHandler;
            }

            return(result);
        }
Exemplo n.º 4
0
        public void TestFormatWebApiRouter()
        {
            Assert.IsTrue(string.Equals(RouterHelper.FormatWebApiRouter(string.Empty), ""), "Format Error");
            Assert.IsTrue(string.Equals(RouterHelper.FormatWebApiRouter(""), ""), "Format Error");
            Assert.IsTrue(string.Equals(RouterHelper.FormatWebApiRouter("/"), ""), "Format Error");

            Assert.IsTrue(string.Equals(RouterHelper.FormatWebApiRouter("ui/ui1"), "ui/ui1"), "Format Error");
            Assert.IsTrue(string.Equals(RouterHelper.FormatWebApiRouter("/ui/ui1"), "ui/ui1"), "Format Error");
        }
Exemplo n.º 5
0
        public void TestFormatStaticUIRouter()
        {
            Assert.IsTrue(string.Equals(RouterHelper.FormatStaticUIRouter(string.Empty), ""), "Format Empty Error");
            Assert.IsTrue(string.Equals(RouterHelper.FormatStaticUIRouter(""), ""), "Format Empty String Error");
            Assert.IsTrue(string.Equals(RouterHelper.FormatStaticUIRouter("/"), ""), "Format / Error");

            Assert.IsTrue(string.Equals(RouterHelper.FormatStaticUIRouter("ui/ui1"), "/ui/ui1"), "Format ui Error");
            Assert.IsTrue(string.Equals(RouterHelper.FormatStaticUIRouter("/ui/ui1"), "/ui/ui1"), "Format /ui Error");
        }
Exemplo n.º 6
0
        /// <inheritdoc/>
        protected override async void HandleClient(SimpleSocket clientSocket, string url)
        {
            string[] urlSegments;
            string   urlParameters;

            RouterHelper.ParseUrl(url, out urlSegments, out urlParameters);
            var parameters = RouterHelper.ParseQueryString(urlParameters);
            var mode       = parameters["mode"];

            // We accept everything
            await AcceptConnection(clientSocket);

            var socketMessageLayer = new SocketMessageLayer(clientSocket, true);

            Guid?packageId = null;

            {
                Guid packageIdParsed;
                if (Guid.TryParse(parameters["packageid"], out packageIdParsed))
                {
                    packageId = packageIdParsed;
                }
            }

            if (mode == "gamestudio")
            {
                Console.WriteLine(@"GameStudio mode started!");

                if (!packageId.HasValue)
                {
                    return;
                }

                lock (gameStudioPerPackageId)
                {
                    gameStudioPerPackageId[packageId.Value] = socketMessageLayer;
                }
            }
            else
            {
                // Create an effect compiler per connection
                var effectCompiler = new EffectCompiler();

                Console.WriteLine(@"Client connected");

                // TODO: This should come from an "init" packet
                effectCompiler.SourceDirectories.Add(EffectCompilerBase.DefaultSourceShaderFolder);

                // Make a VFS that will access remotely the DatabaseFileProvider
                // TODO: Is that how we really want to do that in the future?
                var networkVFS = new NetworkVirtualFileProvider(socketMessageLayer, "/asset");
                VirtualFileSystem.RegisterProvider(networkVFS);
                effectCompiler.FileProvider = networkVFS;

                socketMessageLayer.AddPacketHandler <RemoteEffectCompilerEffectRequest>(packet => ShaderCompilerRequestHandler(socketMessageLayer, effectCompiler, packet));

                socketMessageLayer.AddPacketHandler <RemoteEffectCompilerEffectRequested>(packet =>
                {
                    if (!packageId.HasValue)
                    {
                        return;
                    }

                    SocketMessageLayer gameStudio;
                    lock (gameStudioPerPackageId)
                    {
                        if (!gameStudioPerPackageId.TryGetValue(packageId.Value, out gameStudio))
                        {
                            return;
                        }
                    }

                    // Forward to game studio
                    gameStudio.Send(packet);
                });
            }

            Task.Run(() => socketMessageLayer.MessageLoop());
        }