/// <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)); }
/// <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); } }
/// <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(); } } }