Exemplo n.º 1
0
        /// <summary>
        /// 服务器写入通讯数据
        /// </summary>
        /// <param name="client">客户端连接</param>
        /// <param name="server">服务器</param>
        private void writeData(ClientInfo clientinfo, ServerBase server)
        {
            if (null == clientinfo || null == server)
            {
                return;
            }
            Socket        client       = clientinfo.Client;
            List <byte[]> responseList = clientinfo.BufferResponse;

            while (true)
            {
                //心跳超时关闭退出
                if (DateTime.Now - clientinfo.OPdt > server.TimeDisconn)
                {
                    this.closeClientInfo(clientinfo, server);
                    DisconnEventArgs args = new DisconnEventArgs(client, server);
                    this.raiseEvent(args);
                    return;
                }
                for (int i = 0; i < 80; i++)
                {
                    if (responseList.Count > 0)
                    {
                        break;
                    }
                    Thread.Sleep(5);
                }
                if (responseList.Count < 1)
                {
                    continue;
                }
                //同步事件触发发送响应数据
                clientinfo.OPdt = DateTime.Now;
                Monitor.Enter(clientinfo);
                byte[][] responseArray = responseList.ToArray();
                responseList.Clear();
                Monitor.PulseAll(clientinfo);
                Monitor.Exit(clientinfo);
                try
                {
                    for (int i = 0; i < responseArray.Length; i++)
                    {
                        client.Send(responseArray[i]);
                        ResponseSrvEventArgs argresp = new ResponseSrvEventArgs(client, server, responseArray[i]);
                        this.raiseEvent(argresp);
                    }
                }
                catch (Exception ex)
                {
                    this.closeClientInfo(clientinfo, server);
                    DisconnEventArgs args = new DisconnEventArgs(client, server, ex);
                    this.raiseEvent(args);
                    return;
                }
                clientinfo.OPdt = DateTime.Now;
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// ������д��ͨѶ����
 /// </summary>
 /// <param name="client">�ͻ�������</param>
 /// <param name="server">������</param>
 private void writeData(ClientInfo clientinfo, ServerBase server)
 {
     if (null == clientinfo || null == server)
         return;
     Socket client = clientinfo.Client;
     List<byte[]> responseList = clientinfo.BufferResponse;
     while (true)
     {
         //������ʱ�ر��˳�
         if (DateTime.Now - clientinfo.OPdt > server.TimeDisconn)
         {
             this.closeClientInfo(clientinfo, server);
             DisconnEventArgs args = new DisconnEventArgs(client, server);
             this.raiseEvent(args);
             return;
         }
         for (int i = 0; i < 80; i++)
         {
             if (responseList.Count > 0)
                 break;
             Thread.Sleep(5);
         }
         if (responseList.Count < 1)
             continue;
         //ͬ���¼�����������Ӧ����
         clientinfo.OPdt = DateTime.Now;
         Monitor.Enter(clientinfo);
         byte[][] responseArray = responseList.ToArray();
         responseList.Clear();
         Monitor.PulseAll(clientinfo);
         Monitor.Exit(clientinfo);
         try
         {
             for (int i = 0; i < responseArray.Length; i++)
             {
                 client.Send(responseArray[i]);
                 ResponseSrvEventArgs argresp = new ResponseSrvEventArgs(client, server, responseArray[i]);
                 this.raiseEvent(argresp);
             }
         }
         catch (Exception ex)
         {
             this.closeClientInfo(clientinfo, server);
             DisconnEventArgs args = new DisconnEventArgs(client, server, ex);
             this.raiseEvent(args);
             return;
         }
         clientinfo.OPdt = DateTime.Now;
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// 服务器写入通讯数据
        /// </summary>
        /// <param name="client">客户端连接</param>
        /// <param name="server">服务器</param>
        private void writeData(ClientInfo clientinfo, ServerBase server)
        {
            if (null == clientinfo || null == server)
            {
                return;
            }
            Socket        client       = clientinfo.Client;
            List <byte[]> responseList = clientinfo.BufferResponse;

            while (true)
            {
                //心跳超时关闭退出
                if (DateTime.Now - clientinfo.OPdt > server.TimeDisconn)
                {
                    server.Close(clientinfo);
                    //string msgex = "心跳超时退出,剩余连接数:" + Convert.ToString(server.ClientList.Count);
                    //ExceptionManager.Publish(new Exception(msgex));
                    DisconnEventArgs args = new DisconnEventArgs(client, server);
                    this.raiseEvent(args);
                    return;
                }
                for (int i = 0; i < 80; i++)
                {
                    if (responseList.Count > 0)
                    {
                        break;
                    }
                    Thread.Sleep(5);
                }
                if (responseList.Count < 1)
                {
                    continue;
                }
                //同步事件触发发送响应数据
                clientinfo.OPdt = DateTime.Now;
                Monitor.Enter(clientinfo);
                byte[][] responseArray = responseList.ToArray();
                responseList.Clear();
                Monitor.PulseAll(clientinfo);
                Monitor.Exit(clientinfo);
                try
                {
                    for (int i = 0; i < responseArray.Length; i++)
                    {
                        client.Send(responseArray[i]);
                        Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " S发送:" + CommandBase.Parse(responseArray[i]));
                        myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " S发送:" + CommandBase.Parse(responseArray[i]));
                        ResponseSrvEventArgs argresp = new ResponseSrvEventArgs(client, server, responseArray[i]);
                        this.raiseEvent(argresp);
                    }
                }
                catch (Exception ex)
                {
                    server.Close(clientinfo);
                    //NameValueCollection attr = new NameValueCollection();
                    //attr["剩余连接数"] = Convert.ToString(server.ClientList.Count);
                    //ExceptionManager.Publish(ex, attr);
                    DisconnEventArgs args = new DisconnEventArgs(client, server, ex);
                    this.raiseEvent(args);
                    return;
                }
                clientinfo.OPdt = DateTime.Now;
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// 服务器写入通讯数据
 /// </summary>
 /// <param name="client">客户端连接</param>
 /// <param name="server">服务器</param>
 private void writeData(ClientInfo clientinfo, ServerBase server)
 {
     if (null == clientinfo || null == server)
         return;
     Socket client = clientinfo.Client;
     List<byte[]> responseList = clientinfo.BufferResponse;
     while (true)
     {
         //心跳超时关闭退出
         if (DateTime.Now - clientinfo.OPdt > server.TimeDisconn)
         {
             server.Close(clientinfo);
             //string msgex = "心跳超时退出,剩余连接数:" + Convert.ToString(server.ClientList.Count);
             //ExceptionManager.Publish(new Exception(msgex));
             DisconnEventArgs args = new DisconnEventArgs(client, server);
             this.raiseEvent(args);
             return;
         }
         for (int i = 0; i < 80; i++)
         {
             if (responseList.Count > 0)
                 break;
             Thread.Sleep(5);
         }
         if (responseList.Count < 1)
             continue;
         //同步事件触发发送响应数据
         clientinfo.OPdt = DateTime.Now;
         Monitor.Enter(clientinfo);
         byte[][] responseArray = responseList.ToArray();
         responseList.Clear();
         Monitor.PulseAll(clientinfo);
         Monitor.Exit(clientinfo);
         try
         {
             for (int i = 0; i < responseArray.Length; i++)
             {
                 client.Send(responseArray[i]);
                 Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " S发送:" + CommandBase.Parse(responseArray[i]));
                 myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " S发送:" + CommandBase.Parse(responseArray[i]));
                 ResponseSrvEventArgs argresp = new ResponseSrvEventArgs(client, server, responseArray[i]);
                 this.raiseEvent(argresp);
             }
         }
         catch (Exception ex)
         {
             server.Close(clientinfo);
             //NameValueCollection attr = new NameValueCollection();
             //attr["剩余连接数"] = Convert.ToString(server.ClientList.Count);
             //ExceptionManager.Publish(ex, attr);
             DisconnEventArgs args = new DisconnEventArgs(client, server, ex);
             this.raiseEvent(args);
             return;
         }
         clientinfo.OPdt = DateTime.Now;
     }
 }