//接收到局域网客户消息事件 private void wifiServer_msgReceivedEvent(object sender, MessageEventArgs e) { string msg = e.Msg; controller.handleMessage(msg); }
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; } } }
//处理串口消息事件 private void comServer_msgReceivedEvent(object sender, MessageEventArgs e) { }