Exemple #1
0
    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());
            }
        }
    }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
 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)
     { }
 }
Exemple #4
0
 public bool Add(ICmd cmd)
 {
     lock (CmdLock)
     {
         CmdQueue.Enqueue(cmd);
         return(true);
     }
 }
Exemple #5
0
        /// <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();
        }
Exemple #6
0
 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);
        }
Exemple #8
0
        /// <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();
            }
        }
Exemple #9
0
 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));
        }
Exemple #11
0
        public void move_free_priem(Int32 cell)
        {
            List <Int32> freecells = stacker1.getfreecells();

            if (freecells.Count > 0)
            {
                CmdQueue.trans(cell, freecells[0]);
            }
            else
            {
                MessageBox.Show("Нет свободных приемных ячеек");
            }
        }
Exemple #12
0
 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);
         }
     }
 }
Exemple #13
0
        private void Button_Click_4(object sender, RoutedEventArgs e)
        {
            if (DGCmdlist.SelectedIndex > -1)
            {
                if (DGCmdlist.SelectedIndex == this.CurrCmdIdx)
                {
                    next();
                }

                else
                {
                    CmdQueue.RemoveAt(DGCmdlist.SelectedIndex);
                }
            }
        }
Exemple #14
0
 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);
            }
        }
Exemple #17
0
        /// <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();
        }
Exemple #18
0
    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);
        }
    }
Exemple #19
0
 public void trans(int cell1, int cell2)
 {
     CmdQueue.trans(cell1, cell2);
 }
Exemple #20
0
 public void take(int cell)
 {
     CmdQueue.take(cell);
 }
Exemple #21
0
 public void push(int cell)
 {
     CmdQueue.push(cell);
 }
Exemple #22
0
 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();
 }
Exemple #25
0
        /// <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));
 }
Exemple #27
0
 private void Button_Click_1(object sender, RoutedEventArgs e)
 {
     stacker1_man.kvit();
     CmdQueue.kvit();
 }