Exemple #1
0
        /// <summary>
        /// 添加客户端连接    (注册客户端)
        /// </summary>
        /// <param name="tel">电话号码</param>
        /// <param name="socket">socket实例</param>
        /// <param name="ip">客户端DTU的IP</param>
        /// <param name="port">客户端DTU端口</param>
        public static void AddClient(string tel, Socket socket)
        {
            LogMg.AddDebug(string.Format("进入AddClient方法  tel:{0}", tel));
            Clazz.DTUClientInfo clientInfo = Clients.SingleOrDefault(c => c.TelOrGprsId == tel);
            XML_Station         station    = SysConfig.DTU_StationConfig.Stations.SingleOrDefault(c => c.Tel == tel);

            lock (Clients)
            {
                if (clientInfo == null) //如果客户端不存在,则添加,如果存在,则修改。
                {
                    clientInfo               = new Clazz.DTUClientInfo();
                    clientInfo.TelOrGprsId   = tel;          //手机号码
                    clientInfo.socket        = socket;       //客户端连接实例
                    clientInfo.RegisterTime  = DateTime.Now; //注册时间
                    clientInfo.LastVisitTime = DateTime.Now; //最后一次访问时间
                    if (station != null)
                    {
                        clientInfo.StationId = station.StationId;  //站点id
                        clientInfo.Protocol  = station.Protocol;
                    }
                    Clients.Add(clientInfo);
                }
                else
                {
                    clientInfo.socket        = socket;
                    clientInfo.LastVisitTime = DateTime.Now;    //最后一次访问时间
                }
                if (ClientChangeHander != null)
                {
                    ClientChangeHander();
                }
            }
            LogMg.AddDebug(string.Format("退出AddClient方法  tel:{0}", tel));
        }
Exemple #2
0
 /// <summary>
 /// 拍照方法
 /// </summary>
 /// <param name="db">数据库对象</param>
 /// <param name="stationid">站点id</param>
 /// <param name="client">客户端</param>
 private static void takePhoto(SWSDataContext db, int stationid, Clazz.DTUClientInfo client)
 {
     ///根据站点id去指定的数据库中找拍照指令,如果存在拍照的指令,则调用【_485_JBT_Camera】类的拍照方法。
     try
     {
         List <control_command> jbt_commands = db.control_command.Where(c => c.gong_kuang_id == 0 && c.state == 0 && c.tp == "3" && c.station_id == stationid).OrderBy(c => c.add_datetime).ToList();
         foreach (control_command command in jbt_commands)
         {
             if (command.COUNT == null)
             {
                 command.COUNT = 0;
             }
             try
             {
                 bool flag = false;
                 command.state = 1;               //标志为已发送
                 byte[] imageBytes = new byte[1]; //takePhoto方法内部会再次分配图像数组大小
                 while (flag == false && command.COUNT < SysConfig.userProfile.ExecuteFailureCount)
                 {
                     flag = _485_JBT_Camera.TakePhoto(client, 5000, ref imageBytes);
                     command.COUNT++;
                     LogMg.AddDebug("拍照失败" + (int)command.COUNT + "次");
                 }
                 if (flag == true)                           //如果拍照成功
                 {
                     SavePicture(db, stationid, imageBytes); //保存照片到数据库
                     command.execute_result  = 1;            //标记为执行成功
                     command.execute_comment = "拍照成功";
                 }
                 else
                 {
                     command.execute_result  = 0;  //标记为执行失败
                     command.execute_comment = "拍照失败";
                 }
             }
             catch (Exception ex)
             {
                 LogMg.AddError(ex);
                 command.execute_result  = 0;
                 command.execute_comment = "拍照失败";
             }
             finally
             {
                 command.complete_datetime = DateTime.Now;
                 db.SubmitChanges();
             }
         }
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
     }
 }
Exemple #3
0
 /// <summary>
 /// 删除客户端注册信息
 /// </summary>
 /// <param name="clientInfo"></param>
 public static void DeleteClient(Clazz.DTUClientInfo clientInfo)
 {
     lock (Clients)
     {
         Clients.Remove(clientInfo);
         LogMg.AddDebug("删除客户端注册信息  TEL:" + clientInfo.TelOrGprsId);
         // MessageQueue.Enqueue_RegAndLogout(string.Format("【{0}】: {1}退出系统", DateTime.Now.ToString(), clientInfo.Name));
         if (ClientChangeHander != null)
         {
             ClientChangeHander();
         }
     }
 }