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); }
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); }
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); }
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"); }
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"); }
/// <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()); }