示例#1
0
 public void DelayDo(Fix64 time, DoCallBack callback)
 {
     if (time <= (Fix64)0)
     {
         m_Enable        = true;
         m_FixElapseTime = (Fix64)0.02;
         m_FixPlanTime   = (Fix64)0.02;
         m_DoCallBack    = callback;
     }
     else
     {
         m_Enable        = true;
         m_FixElapseTime = Fix64.Zero;
         m_FixPlanTime   = time;
         m_DoCallBack    = callback;
     }
 }
示例#2
0
        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();
            //}
        }