コード例 #1
0
        private void btnDisconn_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgvConn.CurrentRow == null)
                {
                    MessageBox.Show("未选择连接的客户端!");
                    return;
                }

                IntPtr connId = (IntPtr)(Convert.ToInt32(this.dgvConn.CurrentRow.Cells[0].Value.ToString()));
                //IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim());

                // 断开指定客户
                if (server.Disconnect(connId, true))
                {
                    AddMsg(string.Format("$({0}) 断开客户端正常", connId));
                }
                else
                {
                    throw new Exception(string.Format("断开客户端ID({0}) 出错", connId));
                }
            }
            catch (Exception ex)
            {
                AddMsg(ex.Message);
            }
        }
コード例 #2
0
 private void btnDisconn_Click(object sender, EventArgs e)
 {
     try
     {
         IntPtr connId = (IntPtr)Convert.ToInt32(this.txtDisConn.Text.Trim());
         // 断开指定客户
         if (server.Disconnect(connId, true))
         {
             AddMsg(string.Format("$({0}) Disconnect OK", connId));
         }
         else
         {
             throw new Exception(string.Format("Disconnect({0}) Error", connId));
         }
     }
     catch (Exception ex)
     {
         AddMsg(ex.Message);
     }
 }
コード例 #3
0
        private void buttonDisconnect_Click(object sender, EventArgs e)
        {
            if (checkedListBoxClientList.Items.Count > 0)
            {
                try
                {
                    for (int i = 0; i < checkedListBoxClientList.Items.Count; i++)
                    {
                        IntPtr connId = (IntPtr)Convert.ToInt32(checkedListBoxClientList.Items[i]);

                        if (checkedListBoxClientList.GetItemChecked(i))
                        {
                            server.Disconnect(connId, true);
                        }
                    }
                }
                catch (Exception exc)
                {
                    ShowMSG(exc.Message);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// 处理单个数据
        /// 这个数据可以使任何的,比如登陆的,心跳的 ,还是正常的数据包都行
        /// </summary>
        /// <param name="data">要求为 ClientInfo</param>
        public void ProcessSingleData(object data)
        {
            ClientInfo clientInfo = data as ClientInfo;

            HPSocketCS.TcpServer server = clientInfo.server;
            byte[] bytes  = clientInfo.Data;
            IntPtr connId = clientInfo.ConnId;

            if (clientInfo != null)
            {
                if (bytes.Length == 14 && bytes[0] == 170)
                {
                    //14位长,并且第一位是170,表示是登陆指令,解析登陆id
                    String logid = BaseDTU.ParseLogin(bytes);
                    if (logid != "")
                    {
                        try
                        {
                            //合法的id,首先发送心跳包
                            if (server.Send(clientInfo.ConnId, heartbeat, heartbeat.Length))
                            {
                                //发送心跳包成功,根据过滤的设置显示发送成功的消息
                                if (clientInfo.ConnId.ToInt32() % showFilterNumber == 0)
                                {
                                    AddMsg(string.Format(" 发送了心跳包  {0}", clientInfo.ConnId));
                                }
                                //判断此server的dtu字典中是否存在这个logid
                                if (clientInfo.serverManager.dtuDic.ContainsKey(logid))
                                {
                                    //已存在key,说明已经初始化了
                                    try
                                    {
                                        //心跳完成,准备轮训
                                        clientInfo.serverManager.dtuDic[logid].server = server;
                                        clientInfo.serverManager.dtuDic[logid].connId = connId;
                                        basetimermgr.AddDTU(clientInfo.serverManager.dtuDic[logid]);
                                        if (clientInfo.ConnId.ToInt32() % showFilterNumber == 0)
                                        {
                                            AddMsg(string.Format(clientInfo.serverManager.desc + "    > [客户端] -> {0}开始轮询", (int)connId));
                                        }
                                    }
                                    catch (Exception e)
                                    {
                                        MessageBox.Show(e.Message);
                                    }
                                }
                                else
                                {
                                    //不存在key 未被初始化
                                    if (server.Disconnect(connId, true))
                                    {
                                        //正常断开非法登录客户端
                                    }
                                    AddMsg(string.Format(" > [客户端] -> {0}断开 id : {1}", (int)connId, logid));
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show("发送出错" + e.Message);
                        }
                    }
                    else
                    {
                        //非法id,断开
                        if (server.Disconnect(connId, true))
                        {
                            //正常断开非法登录客户端
                        }
                    }
                }
                else
                {
                    //不是登录包
                    if (bytes == heartbeat)
                    {
                        //收到的是心跳包
                    }
                    else
                    {
                        try
                        {
                            //收到的是正常任务包
                            BaseDTU basedtu = clientInfo.serverManager.dtuDic.Values.Where(item => item.connId == connId).FirstOrDefault();
                            if (basedtu != null)
                            {
                                //把正常数据包丢给dtu处理
                                basedtu.ReceivedCmd(bytes);
                            }
                        }
                        catch (Exception e)
                        {
                            server.Disconnect(connId);
                        }
                    }
                }
            }
            else
            {
                AddMsg(string.Format(" > [{0},OnReceive] -> ({1} bytes)", connId, bytes.Length));
            }
        }