/// <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); }
/// <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<System.Int32, SpotFull>.</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); }