コード例 #1
0
        public static MemcachedProcess Attach(int pid)
        {
            MemcachedProcess mcproc;
            Process          nativeProcess;

            nativeProcess = Process.GetProcessById(pid);

            if (nativeProcess == null)
            {
                Log.Critical("Pid {0} could not be found", pid);
                return(null);
            }

            nativeProcess.Exited += Process_Exited;
            nativeProcess.EnableRaisingEvents = true;

            mcproc         = new MemcachedProcess();
            mcproc.process = nativeProcess;

            if (!_Processes.ContainsKey(mcproc.process.Id))
            {
                _Processes.Add(mcproc.process.Id, mcproc);
            }

            Log.Info("Pid {0} attached successfuly as memcachedprocess", pid);

            return(mcproc);
        }
コード例 #2
0
        private void Process_Exited(object sender, EventArgs e)
        {
            MemcachedProcess process = sender as MemcachedProcess;
            string           instanceName;


            instanceName = process.Tag as string;
            RemoveInstance(instanceName);
        }
コード例 #3
0
        public static MemcachedProcess FireUp(ulong memSize, ushort port)
        {
            MemcachedProcess mcproc = null;

            string           arg;
            ProcessStartInfo psi = null;

            arg = string.Format("-p {0} -m {1}", port, memSize);
            psi = new ProcessStartInfo(Config.Get().MemcachedPath, arg);
            psi.CreateNoWindow  = true;
            psi.UseShellExecute = false;


            mcproc = new MemcachedProcess();

            try
            {
                mcproc.process = new Process();
                mcproc.process.EnableRaisingEvents = true;
                mcproc.process.Exited   += Process_Exited;
                mcproc.process.StartInfo = psi;

                if (!mcproc.process.Start())
                {
                    mcproc.process = null;
                    mcproc         = null;

                    Log.Error("Process could not be started");

                    return(null);
                }
            }
            catch (Exception e)
            {
                mcproc = null;
                Log.Error("memcached process start error: %s", e.Message);
                return(null);
            }

            if (!_Processes.ContainsKey(mcproc.process.Id))
            {
                _Processes.Add(mcproc.process.Id, mcproc);
            }

            return(mcproc);
        }
コード例 #4
0
        public bool Start()
        {
            if (!PutInstance(this, this.name))
            {
                throw new Exception(string.Format("{0} is already registered!", this.name));
            }

            process = MemcachedProcess.FireUp(this.memSize, this.port);

            if (process == null)
            {
                RemoveInstance(this.name);
                return(false);
            }

            process.Tag     = this.name;
            process.Exited += Process_Exited;

            return(true);
        }
コード例 #5
0
        public static MemcachedInstance CreateInstanceFromExist(int pid, ushort port, string name)
        {
            MemcachedInstance inst = new MemcachedInstance(0, name, port);

            if (!inst.PutInstance(inst, inst.name))
            {
                throw new Exception(string.Format("{0} is already registered!", inst.name));
            }

            inst.process = MemcachedProcess.Attach(pid);

            if (inst.process == null)
            {
                inst.RemoveInstance(name);
                inst = null;
                return(null);
            }

            inst.process.Tag     = name;
            inst.process.Exited += inst.Process_Exited;

            return(inst);
        }