//对用户连接消息则要分开是哪个用户 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); } }
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; } } }
//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; } } }
//对上面接收到的消息进行初步处理 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); //向主线程发送消息事件,让键盘控制器进行相应处理,也可以在这里直接处理 } }
//局域网客户连接事件 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++; }
//处理串口用户连接事件 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); } )); }