コード例 #1
0
ファイル: TMPlan.cs プロジェクト: x2v0/TM
        /// <summary>
        /// Override Client.ProcessState - to process server changed state
        /// </summary>
        /// <param name="data"></param>
        public override void ProcessState(StateData data)
        {
            PlanState = (EPlanState)data.state;
            var changed = SpotsPassed != data.spots_passed;

            SpotsPassed = data.spots_passed;
            SpotsTotal  = data.spots_count;

            switch (PlanState)
            {
            case EPlanState.INPROCESS:
                fFinished = false;
                Header    = ReadData.NextPacketHeader();
                var cmd = (EDataCommand)Header.value;
                ReadData.Skip(1); // ??? not clear why, but it works
                if (changed && PlanInProcess != null)
                {
                    PlanInProcess.Invoke(data);
                }

                break;

            case EPlanState.FINISHED:
                fFinished = true;
                if (PlanFinished != null)
                {
                    PlanFinished.Invoke();
                }

                break;

            case EPlanState.PAUSED:
                if (PlanPaused != null)
                {
                    PlanPaused.Invoke();
                }

                break;

            case EPlanState.NOTREADY:
                fReady = false;
                break;

            case EPlanState.READY:
                fReady = true;
                break;

            case EPlanState.UNKNOWN:
                fReady = false;
                break;
            }

            base.ProcessState(data);
        }
コード例 #2
0
ファイル: TMPlan.cs プロジェクト: x2v0/TM
        /// <summary>
        ///    <code>
        /// LoadPlan(file) - loads the specified file with plan data.
        /// SendPlan()     - sends plan to the server specified by ip nad port
        /// StartPlan()    - starts plan processing on the server
        /// while (ProcessingIsOn) - waits for results of processing
        /// when results of plan processing received from server, fills PlanResults list
        /// if (ServerState == EPlanState.FINISHED) - execute PlanFinished() event
        /// </code>
        /// </summary>
        /// <param name="file">The file with plan data.</param>
        /// <param name="ip">The server IP.</param>
        /// <param name="port">The port.</param>
        /// <returns>Dictionary&lt;System.Int32, SpotFull&gt;.</returns>
        public virtual List <SpotFull> Execute(string file, string ip = null, int port = 0)
        {
            ClearPlan();

            var ok = Connect(ip, port);

            if (!ok)
            {
                return(null);
            }

            ok = Load(file) != null;

            if (!ok)
            {
                return(null);
            }

            ok = Send();

            if (!ok)
            {
                if (Globals.Debug)
                {
                    Console.WriteLine(Resources.Failed_to_send + " " + Resources.plan);
                }

                return(null);
            }

            ok = Start();

            while (true)
            {
                ok = AskServerState();

                if (!ok || (PlanState == EPlanState.NOTREADY))
                {
                    if (Globals.Debug)
                    {
                        Console.WriteLine(Resources.Server_not_ready);
                    }

                    //return null;
                }

                if (PlanState == EPlanState.FINISHED)
                {
                    fFinished = true;

                    if (PlanFinished != null)
                    {
                        PlanFinished.Invoke();
                    }

                    break;
                }

                Thread.Sleep(300);
            }

            var ret = new List <SpotFull>();

            foreach (var spot in PlanResults)
            {
                var plan = Plan[spot.id];
                var full = new SpotFull();
                full.id            = spot.id;
                full.xangle        = plan.xangle;
                full.zangle        = plan.zangle;
                full.pcount        = plan.pcount;
                full.energy        = plan.energy;
                full.result_xangle = spot.result_xangle;
                full.result_zangle = spot.result_zangle;
                full.result_pcount = spot.result_pcount;
                full.done          = spot.done;
                //full.changed = spot.Value.changed;
                ret.Add(full);
            }

            return(ret);
        }