public IHttpActionResult GetEqDetail() { ArrayList arrayList = new ArrayList(); foreach (var item in dic_Sockets.Values) { string msgId = Guid.NewGuid().ToString();//定义一个标识,标识这个请求,设备回应的数据应该带上 var obj = new { msgId, url = "queryDeviceDetail" }; item.socket.Send(JsonConvert.SerializeObject(obj)); JObject jObject = null; for (int i = 0; i < 7; i++) //循环去内存中查找有没有回应 { Thread.Sleep(200); jObject = WebApiApplication.GetCache(msgId) as JObject; if (jObject != null) { if (jObject["errCode"].ToString() == "0") { arrayList.Add(jObject["productModel"].ToString()); } else { return(this.ErrorData(jObject["errMsg"].ToString())); } } else { continue; } } } return(this.SendData(arrayList)); }
public async Task <IHttpActionResult> AddTeacherAsync(TeacherVM teacher) { try { foreach (var item in dic_Sockets.Values) { if (item.deviceSerial == teacher.EquipmentNum) { //获取最大的学生ID,然后加一,就当作faceID了,再将这个faceID传入前端设备 int ID = TeacherManager.GetTeacherIdMax(); string faceID = (ID + 1).ToString(); string msgId = Guid.NewGuid().ToString();//定义一个标识,标识这个请求,设备回应的数据应该带上 var obj = new { msgId, faceID, faceName = teacher.Name, teacher.imageContent, url = "addFace" }; await item.socket.Send(JsonConvert.SerializeObject(obj)); JObject jObject = null; for (int i = 0; i < 5; i++) { Thread.Sleep(200); jObject = WebApiApplication.GetCache(msgId) as JObject; if (jObject != null) { if (jObject["errCode"].ToString() == "0") { await TeacherManager.AddTeacherAsync(Convert.ToInt32(faceID), teacher.Name, teacher.PhoneNum, teacher.SchoolID, teacher.EquipmentNum, "data:image/jpeg;base64," + teacher.imageContent); return(this.SendData(jObject)); } else { return(this.ErrorData(jObject["errMsg"].ToString())); } } else { continue; } } return(this.ErrorData("设备没有回应")); } } return(this.ErrorData("没有找到此设备,请查看设备序列号是否正确")); } catch (Exception ex) { LogTool.WriteError(ex.Message); return(this.ErrorData(ex.Message)); } }
public async Task <IHttpActionResult> AddStudentAsync(Student student) { /* * 请求 WebAPI的时候,设置有超时时间,比如说3秒超时。(如果3秒之内你不给我数据,我就认为没有数据返回)。 * 在Socket这一端呢,我向Socket发送WebAPI的请求数据。我给WebAPI的请求数据加一个编号,我当然不知道Socket啥时候给我返回数据,所以开了一个异步的线程,只要Socket有返回数据。我就把返回数据存到缓存里(以请求编号为键,缓存数据,这样就可以找到是哪一次请求的数据了,缓存默认30秒过期)。 * 然后WebAPI请求就在主等待返回数据,肯定不能无限期地等待下去,这里有个请求循环,每个循环 之间延迟100毫秒,最多5次循环。在每次循环中,WebAPI请求都是在缓存中找数据,根据请求编号找对应的返回数据,如果找到请求返回的数据,就直接返回。没找到就循环继续找,直到5次循环结束,还没有找到就认为找不到这条数据。 */ try { server = WebApiApplication.GetCache("SocketServer") as SocketHelper.TcpServer; if (server != null) { //获取最大的学生ID,然后加一,就当作faceID了,再将这个faceID传入前端设备 int ID = StudentManager.GetStudentIdMax(); string faceID = (ID + 1).ToString(); string StrGuid = Guid.NewGuid().ToString();//定义一个标识,标识这个请求,设备回应的数据应该带上 Dictionary <string, string> dictionary = new Dictionary <string, string>(); dictionary.Add("faceID", faceID); dictionary.Add("faceName", student.Name); dictionary.Add("Action", "addFace"); dictionary.Add("imageContent", student.imageContent); dictionary.Add("StrGuid", StrGuid); server.SendToClient(student.EquipmentNum, JsonConvert.SerializeObject(dictionary));//发送数据到客户端,第一个参数是指定设备的序列号,第二个参数是对象 JObject jObject = null; for (int i = 0; i < 5; i++) { Thread.Sleep(200); jObject = WebApiApplication.GetCache(StrGuid) as JObject; if (jObject != null) { await StudentManager.CreatStudentAsync(Convert.ToInt32(faceID), student.Name, student.classValue, student.gradeValue, student.StudentID); return(this.SendData(jObject)); } } return(this.ErrorData("没等到设备回应,查看设备是否已连接到服务器")); } else { return(this.ErrorData("请检查设备是否连接到服务器")); } } catch (Exception ex) { LogTool.WriteError(ex.Message); return(this.ErrorData(ex.Message)); } }
public async Task <IHttpActionResult> AddStudentAsync(Student student) { try { foreach (var item in dic_Sockets.Values) { if (item.deviceSerial == student.EquipmentNum) { //获取最大的学生ID,然后加一,就当作faceID了,再将这个faceID传入前端设备 int ID = StudentManager.GetStudentIdMax(); string faceID = (ID + 1).ToString(); string msgId = Guid.NewGuid().ToString();//定义一个标识,标识这个请求,设备回应的数据应该带上 var obj = new { msgId, faceID, faceName = student.Name, student.imageContent, url = "addFace" }; await item.socket.Send(JsonConvert.SerializeObject(obj)); JObject jObject = null; for (int i = 0; i < 7; i++) //循环去内存中查找有没有回应 { Thread.Sleep(200); jObject = WebApiApplication.GetCache(msgId) as JObject; if (jObject != null) { if (jObject["errCode"].ToString() == "0") { await StudentManager.CreatStudentAsync(Convert.ToInt32(faceID), student.Name, student.classValue, student.gradeValue, item.deviceSerial, student.StudentID, student.Caller, student.PhoneNum.ToString(), "data:image/jpeg;base64," + student.imageContent); return(this.SendData(jObject)); } else { return(this.ErrorData(jObject["errMsg"].ToString())); } } else { continue; } } return(this.ErrorData("设备没有回应")); } } return(this.ErrorData("没有找到此设备,请查看设备序列号是否正确")); } catch (Exception ex) { return(this.ErrorData(ex.Message)); } }
public async Task <IHttpActionResult> AddTeacherAsync(TeacherVM teacher) { try { server = WebApiApplication.GetCache("SocketServer") as SocketHelper.TcpServer; if (server != null) { //获取最大的学生ID,然后加一,就当作faceID了,再将这个faceID传入前端设备 int ID = TeacherManager.GetTeacherIdMax(); string faceID = (ID + 1).ToString(); string StrGuid = Guid.NewGuid().ToString();//定义一个标识,标识这个请求,设备回应的数据应该带上 Dictionary <string, string> dictionary = new Dictionary <string, string>(); dictionary.Add("faceID", faceID); dictionary.Add("faceName", teacher.Name); dictionary.Add("Action", "addFace"); dictionary.Add("imageContent", teacher.imageContent); dictionary.Add("StrGuid", StrGuid); server.SendToClient(teacher.EquipmentNum, JsonConvert.SerializeObject(dictionary));//发送数据到客户端,第一个参数是指定设备的序列号,第二个参数是对象 JObject jObject = null; for (int i = 0; i < 5; i++) { Thread.Sleep(200); jObject = WebApiApplication.GetCache(StrGuid) as JObject; if (jObject != null) { await TeacherManager.AddTeacherAsync(Convert.ToInt32(faceID), teacher.Name, teacher.PhoneNum, teacher.SchoolID); return(this.SendData(jObject)); } } return(this.ErrorData("没等到设备回应,查看设备是否已连接到服务器")); } else { return(this.ErrorData("请检查设备是否连接到服务器")); } } catch (Exception ex) { LogTool.WriteError(ex.Message); return(this.ErrorData(ex.Message)); } }
public async System.Threading.Tasks.Task <IHttpActionResult> EditTeacherAsync(TeacherVM teacher) { try { foreach (var socket in WebSocketController.dic_Sockets.Values) //遍历正在连接的设备 { if (teacher.EquipmentNum == socket.deviceSerial) { var msgId = Guid.NewGuid().ToString(); var obj = new { url = "addFace", msgId, faceName = teacher.Name, faceID = teacher.Id, imageContent = teacher.imageContent, overwrite = true }; await socket.socket.Send(JsonConvert.SerializeObject(obj)); JObject jObject = null; for (int i = 0; i < 7; i++) //循环去内存中查找有没有回应 { Thread.Sleep(200); jObject = WebApiApplication.GetCache(msgId) as JObject; if (jObject != null) { if (jObject["errCode"].ToString() == "0") { await TeacherManager.EditTeacherAsync(teacher.Id, teacher.Name, teacher.PhoneNum, teacher.SchoolID, teacher.EquipmentNum, "data: image / jpeg; base64," + teacher.imageContent); return(this.SendData(jObject)); } else { return(this.ErrorData(jObject["errMsg"].ToString())); } } } return(this.ErrorData("没有等到设备响应")); } } return(this.ErrorData("没找到设备,查看设备相关设置")); } catch (Exception ex) { return(this.ErrorData("错误" + ex.Message)); } }
public IHttpActionResult BatchDelete(Face.Models.Teacher[] teachers) { if (ModelState.IsValid) { try { foreach (var item in teachers) //遍历学生列表 { int count = 0; foreach (var socket in WebSocketController.dic_Sockets.Values) //遍历正在连接的设备 { count++; if (item.DeviceSerial == socket.deviceSerial) { var msgId = Guid.NewGuid().ToString(); var obj = new { url = "deleteFace", msgId, faceID = item.Id }; socket.socket.Send(JsonConvert.SerializeObject(obj)); JObject jObject = null; for (int i = 0; i < 7; i++) //循环去内存中查找有没有回应 { Thread.Sleep(200); jObject = WebApiApplication.GetCache(msgId) as JObject; if (jObject != null) { if (jObject["errCode"].ToString() == "0") { TeacherManager.DeleteTeacher(item.Id); break; } else { return(this.ErrorData(jObject["errMsg"].ToString())); } } else { continue; } } if (jObject != null) { break; } } else if (WebSocketController.dic_Sockets.Values.Count == count) { //最后一次还没找到 return(this.ErrorData("查看设备是否连接")); } } } return(this.SendData(true)); } catch (Exception ex) { return(this.ErrorData(ex.Message)); } } else { return(this.ErrorData("请求错误")); } }