void newThread(object source, System.Timers.ElapsedEventArgs e) { { try { if (isCmding) { return; } bool isReady = true; if (curMySqlDataReader != null) { if (!curMySqlDataReader.IsClosed) { isReady = false; CommonUtil.Log("curMySqlDataReader没有Close"); } } if (isReady && cmdQueue_list.Count > 0) { CmdQueue cmdQueue = cmdQueue_list[0]; if (cmdQueue != null) { doCmd(cmdQueue); } } } catch (Exception ex) { CommonUtil.Log(ex.ToString()); } } }
private bool Next() { ICmd CmdHandle = CurrentCmd; if (CmdHandle == null) { return(false); } lock (CmdHandle) { if (CmdHandle.IsReapteCmd) { return(true); } else if (CmdQueue.Count > 1 && CmdHandle.IsSuccess) { CmdQueue.Dequeue(); return(true); } else { return(false); } } }
private void next() { //CurrCmd = null; try { if (Cycle) { if (CmdQueue.Count == 0) { CurrCmd = null; } else { CurrCmdIdx++; if (CurrCmdIdx == CmdQueue.Count) { CurrCmdIdx = 0; } } } else { CmdQueue.RemoveAt(CurrCmdIdx); } exe_command(); } catch (System.Exception exc) { } }
public bool Add(ICmd cmd) { lock (CmdLock) { CmdQueue.Enqueue(cmd); return(true); } }
/// <summary> /// 更新队列时间 /// </summary> /// <param name="queue"></param> public static void UpdateQueueTime(CmdQueue queue) { WebDBEntities2 entity = new WebDBEntities2(); CmdQueue q = entity.CmdQueues.FirstOrDefault(p => p.APIDeviceId == queue.APIDeviceId && p.CmdCode == queue.CmdCode); q.LastExecTime = DateTime.Now.AddMinutes(q.ExceTime ?? 0); entity.SaveChanges(); }
void doCmdComplete(CmdQueue cmdQueue) { if (cmdQueue_list.Count > 0) { cmdQueue.isComplete = true; cmdQueue_list.Remove(cmdQueue); } isCmding = false; }
private void OnConnected(object sender, SocketAsyncEventArgs args) { // Queue the first read and write CmdQueue.Push(CommandFactory.MakeCommand(DoNextRead, _blob)); CmdQueue.Push(CommandFactory.MakeCommand(DoPing)); Start(); // We've sent the first request so schedule timer to start one interval later _timer = new Timer(TimerPingCallback, null, _refreshRate, _refreshRate); }
/// <summary> /// 移除队列 /// </summary> /// <param name="cmdCode"></param> /// <param name="deviceId"></param> public static void DelCmdQueue(string cmdCode, int deviceId) { WebDBEntities2 entity = new WebDBEntities2(); CmdQueue q = entity.CmdQueues.FirstOrDefault(p => p.APIDeviceId == deviceId && p.CmdCode == cmdCode); if (q != null) { entity.CmdQueues.Remove(q); entity.SaveChanges(); } }
public void Clear() { lock (CmdLock) { ICmd cmdhandle = CurrentCmd; CmdQueue.Clear(); if (cmdhandle != null) { cmdhandle.IsCmdStop = true; } } }
private void OnReceive(object sender, SocketAsyncEventArgs args) { if (args.BytesTransferred > 0) { // We received data so push it back onto the queue for processing CmdQueue.Push(CommandFactory.MakeCommand(DoProcessData, args.Buffer, args.BytesTransferred)); } // Queue up next read with new blob (assume that processing of data happens // prior to queueing the next read so we can recycle the blob). CmdQueue.Push(CommandFactory.MakeCommand(DoNextRead, _blob)); }
public void move_free_priem(Int32 cell) { List <Int32> freecells = stacker1.getfreecells(); if (freecells.Count > 0) { CmdQueue.trans(cell, freecells[0]); } else { MessageBox.Show("Нет свободных приемных ячеек"); } }
void cleanCmdQuene() { for (int i = cmdQueue_list.Count - 1; i >= 0; i--) { CmdQueue temp = cmdQueue_list[i]; if (temp == null) { //cmdQueue_list.Remove(temp); } else if (temp.isComplete) { //cmdQueue_list.Remove(temp); } } }
private void Button_Click_4(object sender, RoutedEventArgs e) { if (DGCmdlist.SelectedIndex > -1) { if (DGCmdlist.SelectedIndex == this.CurrCmdIdx) { next(); } else { CmdQueue.RemoveAt(DGCmdlist.SelectedIndex); } } }
public bool AddRange(ICmd[] cmds) { lock (CmdLock) { if (CmdQueue.Count != 0) { return(false); } foreach (ICmd cmd in cmds) { CmdQueue.Enqueue(cmd); } CmdQueue.Peek().IsReapteCmd = true; return(true); } }
private void OnReceiveData(IAsyncResult res) { int data = _incoming.EndReceive(res); byte[] blob = res.AsyncState as byte[]; if (data > 0) { // We received data so push it back onto the queue for processing CmdQueue.Push(CommandFactory.MakeCommand(DoProcessData, blob, data)); } // Queue up next read with new blob (assume that processing of data happens // prior to queueing the next read so we can recycle the blob). CmdQueue.Push(CommandFactory.MakeCommand(DoNextRead, blob)); }
public AsyncConnectionDriver(Runtime.Runtime runtime, MemoryStream memStream) : base(false) { try { _memStream = memStream; _runtime = runtime; _runtime.Driver = this; IPHostEntry e = Dns.GetHostEntry(HOST); _incoming = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _log.InfoFormat("Resolved {0} to {1}.", HOST, e.AddressList[0].ToString()); _log.Info("Connecting..."); #if COMPACT EndPoint ep = new IPEndPoint(e.AddressList[0], PORT); _incoming.Connect(ep); _incoming.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 10000); #else _incoming.Connect(e.AddressList, PORT); _incoming.ReceiveTimeout = 10000; // 10 seconds because we may not always be receiving data #endif // Queue the first read and write CmdQueue.Push(CommandFactory.MakeCommand(DoNextRead, new byte[BLOB_SIZE])); CmdQueue.Push(CommandFactory.MakeCommand(DoPing)); Start(); // We've sent the first request so schedule timer to start one interval later _timer = new Timer(TimerPingCallback, null, _refreshRate, _refreshRate); _log.Info("Connected."); } catch (SocketException e) { throw new ConnectionException(e); } }
/// <summary> /// 添加指令执行队列,定时下发指令 /// </summary> /// <param name="queue"></param> public static void SaveCmdQueue(CmdQueue queue) { WebDBEntities2 entity = new WebDBEntities2(); CmdQueue q = entity.CmdQueues.FirstOrDefault(p => p.APIDeviceId == queue.APIDeviceId && p.CmdCode == queue.CmdCode); if (q != null) { q.Model = queue.Model; q.IMEI = queue.IMEI; q.LastExecTime = queue.LastExecTime; q.Param = queue.Param; q.Notice = queue.Notice; q.ExceTime = queue.ExceTime; } else { entity.CmdQueues.Add(queue); } entity.SaveChanges(); }
void doCmd(CmdQueue cmdQueue) { try { isCmding = true; if (cmdQueue != null) { switch (cmdQueue.cmdType) { case CmdType.query: { List <Object> data = getTableData(cmdQueue.table, cmdQueue.tiaojian_keyObjList); if (cmdQueue.onCmdCallBack != null) { doCmdComplete(cmdQueue); cmdQueue.onCmdCallBack(new CmdReturnData(CmdResult.OK, data)); } break; } case CmdType.insert: { int code = insertData(cmdQueue.table, cmdQueue.change_keyObjList); CmdResult result = code == 1 ? CmdResult.OK : CmdResult.Fail; if (cmdQueue.onCmdCallBack != null) { doCmdComplete(cmdQueue); cmdQueue.onCmdCallBack(new CmdReturnData(result)); } break; } case CmdType.update: { int code = updateData(cmdQueue.table, cmdQueue.tiaojian_keyObjList, cmdQueue.change_keyObjList); CmdResult result = code == 1 ? CmdResult.OK : CmdResult.Fail; if (cmdQueue.onCmdCallBack != null) { doCmdComplete(cmdQueue); cmdQueue.onCmdCallBack(new CmdReturnData(result)); } break; } case CmdType.delete: { int code = deleteData(cmdQueue.table, cmdQueue.tiaojian_keyObjList); CmdResult result = code == 1 ? CmdResult.OK : CmdResult.Fail; if (cmdQueue.onCmdCallBack != null) { doCmdComplete(cmdQueue); cmdQueue.onCmdCallBack(new CmdReturnData(result)); } break; } } } else { isCmding = false; CommonUtil.Log("cmdQueue == null"); } } catch (Exception ex) { CommonUtil.Log(ex); } }
public void trans(int cell1, int cell2) { CmdQueue.trans(cell1, cell2); }
public void take(int cell) { CmdQueue.take(cell); }
public void push(int cell) { CmdQueue.push(cell); }
public void park() { CmdQueue.park(); }
private void TimerPingCallback(object state) { // It's time to do another ping CmdQueue.Push(CommandFactory.MakeCommand(DoPing)); }
/// <summary> /// Need just for designer /// </summary> public VisualControl() { _commandsQueue = new CmdQueue(this); InitializeComponent(); }
/// <summary> /// 下发指令 /// </summary> /// <param name="cmdCode">指令code</param> /// <param name="deviceId">设备id</param> /// <returns></returns> public JsonResult AjaxSendCmd(string cmdCode, int deviceId, string param, int min) { BaseResult res = new BaseResult(); Device d = DeviceLogic.GetDeviceById(deviceId); CmdConfig cmd = CmdLogic.GetCmdConfigByCode(cmdCode, d.APIDeviceModel.Value); if ((d.APIDeviceModel ?? 0) <= 0) { res.Message = "指令下发失败,设备型号为空!"; res.State = State.Falid; return(Json(res)); } CmdLog log = new CmdLog(); log.CmdCode = cmdCode; log.CmdName = cmd.CmdName; log.Imei = d.Imei; log.Param = param; log.IsSucess = false; log.SendLoginName = AuthUser.LoginName; //是否立即下发,不是的加入队列 if ((cmd.IsNowSend ?? true) == false)//设置主动上传间隔 { log.SendDate = DateTime.Now; if (min > 0) { CmdQueue queue = new CmdQueue(); queue.APIDeviceId = d.APIDeviceId; queue.Model = d.APIDeviceModel.Value; queue.CmdCode = cmdCode; queue.Created = DateTime.Now; queue.LastExecTime = DateTime.Now; queue.Param = param; queue.ExceTime = min; queue.IMEI = d.Imei; queue.Notice = AuthUser.LoginName; CmdLogic.SaveCmdQueue(queue); SaveUserLog(AuthUser.LoginName + "设置了设备" + d.Imei + cmd.CmdName + ":" + min + "分钟", LogLevel.Info, AuthUser.LoginName, "AjaxSendCmd", "下发指令"); } else { CmdLogic.DelCmdQueue(cmdCode, d.APIDeviceId.Value); } log.CmdName = cmd.CmdName + ":" + min + "分钟"; res.State = State.Success; res.Message = "设置成功," + min + "分钟"; //return Json(res); } else if (d != null) { log.SendDate = DateTime.Now; SendCmdModel model = DeviceData.SendCmd(cmdCode, d.APIDeviceId ?? 0, d.APIDeviceModel ?? 0, CacheHelper.GetToken(d.UserId), param); if (model.State != 0) { res.State = State.Falid; res.Message = model.Content + ":" + model.Message; SaveUserLog(AuthUser.LoginName + "下发设备" + d.Imei + "的" + cmd.CmdName + "指令失败:" + res.Message, LogLevel.Sensitive, AuthUser.LoginName, "AjaxSendCmd", "下发指令"); } else { log.IsSucess = true; res.State = State.Success; res.Message = model.Content; SaveUserLog(AuthUser.LoginName + "下发设备" + d.Imei + "的" + cmd.CmdName + "指令:" + res.Message, LogLevel.Info, AuthUser.LoginName, "AjaxSendCmd", "下发指令"); //WriteLog( + res.Message); } log.Response = model.State + "|" + res.Message; log.ResponseTime = DateTime.Now; } else { res.State = State.NotFind; res.Message = "设备不存在"; WriteLog(AuthUser.LoginName + "下发设备" + d.Imei + "的" + cmd + "指令失败:" + res.Message); } //保存指令下发记录 CmdLogic.SaveCmdLog(log); if (res.Message.StartsWith("Off")) { res.Message = "设备不线,指令离线下发"; } return(Json(res)); }
public void SetRefresh(int refreshRate) { CmdQueue.PushUrgent(CommandFactory.MakeCommand(DoSetRefresh, refreshRate)); }
private void Button_Click_1(object sender, RoutedEventArgs e) { stacker1_man.kvit(); CmdQueue.kvit(); }