/// <summary> /// 发送任务后的回调方法 /// </summary> /// <param name="taskInfo"></param> public static void CallBack(MModel_Ws.ResultInfo resultInfo) { //显示 //ShowInfo(string.Format("{0}:TaskName[{1}],"+System.Environment.NewLine+" info:[{2}]", "TaskCallBack", resultInfo.taskname, JsonConvert.SerializeObject(resultInfo))); ShowInfo(string.Format("{0}:TaskName[{1}]", "TaskCallBack", resultInfo.taskname)); //从任务列表中移除 taskList.Remove(resultInfo.taskname); }
public static void Init(string Url, DoCallBack _callBack, DoMessage _doMessage, DoShowInfo _doShowInfo) { FleckLog.Level = LogLevel.Debug; _DoCallBack = _callBack; _DoMessage = _doMessage; _DoShowInfo = _doShowInfo; //var allSockets = new List<IWebSocketConnection>(); //var server = new WebSocketServer("ws://0.0.0.0:4696"); var server = new WebSocketServer(Url); server.Start(socket => { socket.OnOpen = () => { ShowInfo("Open!"); //allSockets.Add(socket); string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort; string deviceMachineCode = ""; string deviceKey = ""; try { //从headers得到机器码 deviceMachineCode = socket.ConnectionInfo.Headers["deviceMachineCode"]; deviceKey = socket.ConnectionInfo.Headers["deviceKey"]; } catch { } ShowInfo("与客户端:" + clientUrl + " 建立WebSock连接!"); ShowInfo("请求deviceKey:" + deviceKey); //判断是否可以接入 if (!string.IsNullOrEmpty(deviceKey)) { bool isOk = ValidDevices.Keys.Contains(deviceKey); ShowInfo(string.Format("设备[{0}]请求接入,结果[{1}]", deviceKey, isOk)); if (isOk) { if (dic_Sockets.Keys.Contains(deviceKey)) { dic_Sockets[deviceKey] = socket; } else { dic_Sockets.Add(deviceKey, socket); } return; } } else { ShowInfo(string.Format("{0}|服务器:请求接入失败,原因:未传入DeviceKey", DateTime.Now.ToString())); } //如果不是有效的设备,则断开 socket.Close(); }; socket.OnError = (Exception ex) => { ShowInfo("OnError!" + ex.ToString()); //allSockets.Remove(socket); }; socket.OnClose = () => { ShowInfo("Close!"); //allSockets.Remove(socket); }; socket.OnMessage = message => { ShowInfo("socket.OnMessage:" + message); try { MModel_Ws.ResultInfo resultInfo = JsonConvert.DeserializeObject <MModel_Ws.ResultInfo>(message); string taskName = resultInfo.taskname; //得到请求后的返回处理 if (MessageList.Keys.Contains(taskName)) { DoCallBack callBack = MessageList[taskName]; if (callBack != null) { callBack.Invoke(resultInfo); return; } } TaskInfo taskInfo = JsonConvert.DeserializeObject <TaskInfo>(message); //如果在请求回调列表中没有找到,则处理“接收” _DoMessage?.Invoke(socket, taskInfo); } catch (Exception ex) { ShowInfo(ex.Message); } }; socket.OnPing = (byte[] ex) => { ShowInfo("OnPing!" + System.Text.Encoding.Default.GetString(ex)); socket.SendPong(ex); }; }); //var input = Console.ReadLine(); //while (input != "exit") //{ // foreach (var socket in dic_Sockets.Values) // { // socket.Send(input); // } // input = Console.ReadLine(); //} }