Exemplo n.º 1
0
 /// <summary>
 /// 判断 继续等待登录
 /// </summary>
 /// <param name="obj"></param>
 private void WaitLoginAgain(ConnectObject obj)
 {
     if (obj != null && obj.Enabled)
     {
         if ((DateTime.Now - obj.ConnectTime).TotalSeconds > 30)
         {
             //连接登录超时
             FirstCloseClient(obj);
         }
         else
         {
             FirstReceive(obj);
         }
     }
 }
Exemplo n.º 2
0
        //string ReceiveCallback(IAsyncResult ar, ClientFather obj)
        //{
        //    string msg = null;
        //    int index = 0;
        //    int bsize = 0;
        //    int txLength = 0;
        //    string rtMsg = null; ;
        //    try
        //    {
        //        bsize = obj.ConnSocket.workSocket.EndReceive(ar);
        //        if (bsize > 0)
        //        {
        //            obj.ConnSocket.sb.Append(HexBytes.BytesToHex(obj.ConnSocket.buffer, 0, bsize));
        //            msg = obj.ConnSocket.sb.ToString();
        //            Console.WriteLine(string.Format("DATA:{0}", HexBytes.BytesToHex(obj.ConnSocket.buffer, 0, bsize)));
        //             index = msg.IndexOf("BDBDBD");
        //            if (index < 0)
        //            {
        //                obj.ConnSocket.sb = new StringBuilder();
        //            }
        //            else
        //            {
        //                if (msg.Length - index >= 32)
        //                {
        //                    txLength = 32 + 2 * Convert.ToInt32(msg.Substring(index + 28, 4), 16) + 4;
        //                    if (msg.Length >= index + txLength)
        //                    {
        //                        obj.ConnSocket.sb = new StringBuilder(msg.Substring(index + txLength));
        //                        //DoWork(msg.Substring(index, 32 + Convert.ToInt32(msg.Substring(index + 29, 2), 16) + 2));
        //                        rtMsg = msg.Substring(index, txLength);
        //                    }
        //                }
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        SocketError(obj, ex.Message);
        //    }
        //    return rtMsg;
        //}
        string ReceiveCallback(IAsyncResult ar, ConnectObject obj)
        {
            string msg = null;
            int index = 0;
            int bsize = 0;
            int txLength = 0;
            string rtMsg = null; ;
            try
            {
                bsize = obj.workSocket.EndReceive(ar);
                if (bsize > 0)
                {
                    obj.sb.Append(HexBytes.BytesToHex(obj.buffer, 0, bsize));
                    msg = obj.sb.ToString();

                    Console.WriteLine(string.Format("DATA:{0}", HexBytes.BytesToHex(obj.buffer, 0, bsize)));

                    index = msg.IndexOf("BDBDBD", StringComparison.Ordinal);
                    if (index < 0)
                    {
                        obj.sb = new StringBuilder();
                    }
                    else
                    {
                        if (msg.Length - index >= 32)
                        {
                            txLength = 32 + 2 * Convert.ToInt32(msg.Substring(index + 28, 4), 16) + 4;
                            if (msg.Length >= index + txLength)
                            {
                                obj.sb = new StringBuilder(msg.Substring(index + txLength));
                                //DoWork(msg.Substring(index, 32 + Convert.ToInt32(msg.Substring(index + 29, 2), 16) + 2));
                                rtMsg = msg.Substring(index, txLength);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                FirstSocketError(obj, ex.Message);
            }
            return rtMsg;
        }
Exemplo n.º 3
0
 //SOCKET异常
 void FirstSocketError(ConnectObject obj, string errmsg)
 {
     if (obj.Enabled)
     {
         obj.Enabled = false;
         obj.workSocket.Shutdown(SocketShutdown.Both);
         obj.workSocket.Close();
         //ClientList.Remove(obj);
         //if (SocketErrorEvent != null)
         //{
         //    SocketErrorEvent.BeginInvoke(obj, errmsg, null, null);
         //}
     }
 }
Exemplo n.º 4
0
        //登录成功前的数据接收
        void FirstReceive(ConnectObject conn)
        {
            try
            {
                conn.workSocket.BeginReceive(conn.buffer, 0, conn.buffer.Length, SocketFlags.None, p =>
                {
                    string msg = ReceiveCallback(p, conn);
                    if (msg != null)
                    {
                        if (LoginingEvent != null)
                        {
                            try
                            {
                                LoginingEvent.BeginInvoke(conn, msg, m =>
                                {
                                    var client = LoginingEvent.EndInvoke(m);
                                    if (client.IsLogin == true)
                                    {
                                        //登录成功
                                        client.LoginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                                        client.LoginTxData = msg;

                                        if (LoginSuccessEvent != null)
                                        {
                                            LoginSuccessEvent.BeginInvoke(client, null, null);
                                        }
                                        //开始正常接收数据
                                        Receive(client);
                                    }
                                    else
                                    {
                                        //登录失败
                                        WaitLoginAgain(conn);
                                    }

                                }, null);
                            }
                            catch
                            {
                                WaitLoginAgain(conn);
                            }
                        }
                        else
                        {
                            WaitLoginAgain(conn);
                        }
                    }
                    else {
                        WaitLoginAgain(conn);
                    }

                }, conn);
            }
            catch (Exception ex)
            {
                FirstSocketError(conn, ex.Message);
            }
        }
Exemplo n.º 5
0
        //接收新连接
        void Accept()
        {
            ConnectObject obj = new ConnectObject();
            socketListener.BeginAccept(p => {
                obj.ConnectTime = DateTime.Now;
                //obj.IsLogin = false;
                obj.Enabled = true;
                try
                {
                    var socket = socketListener.EndAccept(p);
                    obj.workSocket = socket;
                    obj.IP = ((IPEndPoint)obj.workSocket.RemoteEndPoint).Address.ToString();
                    obj.port = ((IPEndPoint)obj.workSocket.RemoteEndPoint).Port;
                    //ClientList.Add(obj);
                    if (ConnectNewEvent != null)
                        ConnectNewEvent.BeginInvoke((IPEndPoint)socket.RemoteEndPoint, null, null);
                    FirstReceive(obj);
                }
                catch { }

                Accept();
            }, null);
        }
Exemplo n.º 6
0
 public void FirstCloseClient(ConnectObject obj)
 {
     if (obj.Enabled)
     {
         obj.Enabled = false;
         obj.workSocket.Shutdown(SocketShutdown.Both);
         obj.workSocket.Close();
         //ClientList.Remove(obj);
         //if (SocketCloseEvent != null)
         //{
         //    SocketCloseEvent.BeginInvoke(obj, null, null);
         //}
     }
 }