コード例 #1
0
        static int Main(string[] args)
        {
            if (args.Length > 0)
            {
                Settings.CacheDirectory = Path.GetFullPath(args[0]);
            }

            while (true)
            {
                CClashResponse resp = null;
                try
                {
                    var cc = new CClashServerClient(Settings.CacheDirectory);
                    resp = cc.Transact(new CClashRequest()
                    {
                        cmd = Command.GetStats
                    });
                }
                catch (CClashServerNotReadyException)
                {
                    Console.Error.Write(".");
                }
                catch (Exception)
                {
                    Console.Error.Write("e");
                }

                if (resp != null)
                {
                    Console.Clear();
                    Console.Out.WriteLine(DateTime.Now.ToString("s"));
                    Console.Out.WriteLine(resp.stdout);
                }


                Thread.Sleep(1000);
            }
        }
コード例 #2
0
ファイル: CClashServer.cs プロジェクト: artillery/cclash
        public CClashResponse ProcessRequest(CClashRequest req)
        {
            var rv = new CClashResponse() { supported = false };
            Logging.Emit("{0}", DateTime.Now.ToString("s"));
            Logging.Emit("server req: cmd = {0}, workdir = {1}",
                req.cmd, req.workdir);           

            switch (req.cmd)
            {

                case Command.GetStats:
                    rv.exitcode = 0;
                    cache.SetupStats(); // commits stats to disk
                    rv.stdout = StatOutputs.GetStatsString(req.compiler, cache);
                    break;

                case Command.DisableCache:
                    DisableCaching = true;
                    rv.supported = true;
                    break;

                case Command.ClearCache:
                    DisableCaching = true;
                    cache.SetupStats();
                    cache.Lock(CacheLockType.ReadWrite);
                    cache.OutputCache.ClearLocked();
                    cache.IncludeCache.ClearLocked();
                    cache.Unlock(CacheLockType.ReadWrite);
                    rv.supported = true;
                    break;

                case Command.EnableCache:
                    DisableCaching = false;
                    rv.supported = true;
                    break;

                case Command.Run:
                    var stdout = new StringBuilder();
                    var stderr = new StringBuilder();
                    var comp = cache.SetCompilerEx(req.pid, req.compiler, req.workdir, new Dictionary<string,string>( req.envs ));
                    cache.SetCaptureCallback(comp, (so) => { stdout.Append(so); }, (se) => { stderr.Append(se); });
                    if (DisableCaching) {
                        rv.exitcode = comp.InvokeCompiler(req.argv, null, null, false, new List<string>());
                    } else {
                        rv.exitcode = cache.CompileOrCache(comp, req.argv);
                    }
                    rv.supported = true;
                    rv.stderr = stderr.ToString();
                    rv.stdout = stdout.ToString();

                    break;

                case Command.Quit:
                    cache.SetupStats();
                    Stop();
                    break;
            }

            Logging.Emit("server resp: {0}", rv.exitcode);

            return rv;
        }