Пример #1
0
 //对用户连接消息则要分开是哪个用户
 private void server_clientConnectEvent(object sender, ClientConnectEventArgs e)
 {
     this.userList.Add(e.UserName, com);
     //触发新用户加入事件,先设置参数
     ClientConnectEventArgs e1 = new ClientConnectEventArgs();
     e1.UserName = e.UserName;
     e1.UserList = this.getUserList();
     //通知服务器界面
     if (this.clientConnectEvent != null)
     {
         //参数含义:第一个是sender消息发送者,第二个是消息的参数信息(包含要传递的信息:任何复杂对象!),可以无参数
         this.clientConnectEvent(this, e1);
     }
 }
Пример #2
0
        private void ResponseClient(Socket socket)
        {
            while (keepReading)
            {
                try
                {
                    int count = socket.Available;
                    //有数据才读
                    if (count > 0)
                    {
                        byte[] buffer = new byte[count];
                        //接收消息
                        socket.Receive(buffer);
                        //对TCP的数据,一定要加上结束符判断数据结束
                        string msg = String.Empty;
                        msg = Encoding.ASCII.GetString(buffer).TrimEnd('\0');
                        //与客户端协议好,处理用 | 分开的消息
                        // 前缀为client表示是新客户连接
                        // 前缀为message表示是数据消息
                        string[] tokens = msg.Split('|');
                        //连接成功后,先发客户端的用户名过来,再接收下一条信息
                        //如果是用户连接消息
                        if (tokens[0] == Config.CLIENT_PRE)
                        {
                            Console.WriteLine(tokens[1]);
                            //如果有用户已经存在,则不处理
                            if (this.userlist.Keys.Contains(tokens[0]))
                            {
                                break;
                            }
                            //否则将用户加入到用户列表中
                            else
                            {
                                //取后面的作为用户名
                                this.userlist.Add(tokens[1], socket);
                            }
                            //触发新用户加入事件,先设置参数
                            ClientConnectEventArgs e1 = new ClientConnectEventArgs();
                            e1.UserName = tokens[1];
                            e1.UserList = this.GetUserList();
                            //通知服务器界面
                            if (this.clientConnectEvent != null)
                            {
                                //参数含义:第一个是sender消息发送者,第二个是消息的参数信息(包含要传递的信息:任何复杂对象!),可以无参数
                                this.clientConnectEvent(this, e1);
                            }
                        }
                        //否则认为是命令消息
                        //if (tokens[0] == Config.CMD_PRE)
                        else
                        {
                            MessageEventArgs e = new MessageEventArgs();
                            e.Msg = msg;
                            controller.handleMessage(msg);
                            //向主线程发送消息事件,让键盘控制器进行相应处理,也可以在这里直接处理
                            //if (this.msgReceivedEvent != null)
                            //{
                            //    this.msgReceivedEvent(this, e);
                            //}
                        }
                    }
                }
                catch (Exception)
                {
                    keepReading = false;
                }

            }
        }
Пример #3
0
        //UDP处理接收消息的函数
        public void udpWork()
        {
            while (keepListening)
            {
                try
                {
                    int count = udpServer.Available;
                    //有数据才读
                    if (count > 0)
                    {
                        byte[] buffer = new byte[count];
                        //接收消息
                        buffer = udpServer.Receive(ref ipEndPoint);
                        string msg = Encoding.ASCII.GetString(buffer);
                        //与客户端协议好,处理用 | 分开的消息
                        // 前缀为client表示是新客户连接
                        // 无前缀表示是数据消息
                        string[] tokens = msg.Split('|');
                        //连接成功后,先发客户端的用户名过来,再接收下一条信息
                        //如果是用户连接消息
                        if (tokens[0] == Config.CLIENT_PRE)
                        {
                            Console.WriteLine(tokens[1]);
                            //如果有用户已经存在,则不处理
                            if (this.udpUserList.Contains(tokens[0]))
                            {
                                break;
                            }
                            //否则将用户加入到用户列表中
                            else
                            {
                                //取后面的作为用户名
                                this.udpUserList.Add(tokens[1]);
                            }
                            //触发新用户加入事件,先设置参数
                            ClientConnectEventArgs e1 = new ClientConnectEventArgs();
                            e1.UserName = tokens[1];
                            e1.UserList = udpUserList;
                            //通知服务器界面
                            if (this.clientConnectEvent != null)
                            {
                                //参数含义:第一个是sender消息发送者,第二个是消息的参数信息(包含要传递的信息:任何复杂对象!),可以无参数
                                this.clientConnectEvent(this, e1);
                            }
                        }
                        //否则认为是命令消息
                        //if (tokens[0] == Config.CMD_PRE)
                        else
                        {
                            controller.handleMessage(msg);
                            //MessageEventArgs e = new MessageEventArgs();
                            //e.Msg = msg;
                            ////向主线程发送消息事件,让键盘控制器进行相应处理,也可以在这里直接处理
                            //if (this.msgReceivedEvent != null)
                            //{
                            //    this.msgReceivedEvent(this, e);
                            //}
                        }
                    }
                }
                catch (Exception)
                {
                    keepListening = false;
                }

            }
        }
Пример #4
0
 //对上面接收到的消息进行初步处理
 private void handleMessage(string message)
 {
     Console.WriteLine(message);
     string[] tokens = message.Split('|');
     if (tokens[0] == Config.CLIENT_PRE)
     {
         ClientConnectEventArgs e = new ClientConnectEventArgs();
         e.UserName = tokens[0];
         //通知comServer服务器
         if (this.clientConnectEvent != null)
         {
             //参数含义:第一个是sender消息发送者,第二个是消息的参数信息(包含要传递的信息:任何复杂对象!),可以无参数
             this.clientConnectEvent(this, e);
         }
     }
     else
     {
         controller.handleMessage(message);
         //向主线程发送消息事件,让键盘控制器进行相应处理,也可以在这里直接处理
     }
 }
Пример #5
0
 //局域网客户连接事件
 private void wifiServer_clientConnectEvent(object sender, ClientConnectEventArgs e)
 {
     //添加一个panel显示该用户的用户名
     //每一次有用户连接则先清空面板,再刷新面板
     connectedPanel.Controls.Clear();
     //向主界面发送消息
     this.Invoke((EventHandler)(delegate
          {
              foreach (string username in e.UserList)
              {
                  UserPanel userPanel = new UserPanel(username, wifiServer);
                  userPanel.Location = new System.Drawing.Point(0, ConnectedCount * 40);
                  this.connectedPanel.Controls.Add(userPanel);
              }
          }));
     ConnectedCount++;
 }
Пример #6
0
 //处理串口用户连接事件
 private void comServer_clientConnectEvent(object sender, ClientConnectEventArgs e)
 {
     //向主界面发送消息
     this.Invoke((EventHandler)(delegate
     {
         UserPanel userPanel = new UserPanel(e.UserName,bluetoothServer);
         userPanel.Location = new System.Drawing.Point(0, ConnectedCount * 40);
         this.connectedPanel.Controls.Add(userPanel);
     }
         ));
 }