/// <summary>异步发送message给user</summary> public void AsyncSendToOne(User user, string message) { SendToOneDelegate d = new SendToOneDelegate(SendToOne); IAsyncResult result = d.BeginInvoke(user, message, null, null); while (result.IsCompleted == false) { Thread.Sleep(250); } d.EndInvoke(result); }
/// <summary>向某个客户端发送信息</summary> /// <param name="gameTable">指定客户</param> /// <param name="gameTable">信息</param> public void SendToOne(User user, string str) { try { user.sw.WriteLine(str); user.sw.Flush(); AddItem(string.Format("向{0}发送{1}", user.userName, str)); } catch { AddItem(string.Format("向{0}发送信息失败", user.userName)); } }
/// <summary>接受客户端发来的信息</summary> private void ReceiveMessage(User user, out string receiveMessage) { try { receiveMessage = user.sr.ReadLine(); } catch (Exception ex) { service.AddItem(ex.Message); receiveMessage = null; } }
/// <summary> /// 循环检测该用户是否坐到某游戏桌上,如果是,将其从游戏桌上移除,并终止该桌游戏 /// </summary> /// <param name="user">客户端</param> private void RemoveClientfromPlayer(User user) { for (int i = 0; i < gameTable.Length; i++) { for (int j = 0; j < 2; j++) { if (gameTable[i].gamePlayer[j].user != null) { //判断是否同一个对象 if (gameTable[i].gamePlayer[j].user == user) { StopPlayer(i, j); return; } } } } }
/// <summary>监听客户端请求</summary> private void ListenClientConnect() { TcpClient newClient = null; while (true) { ListenClientDelegate d = new ListenClientDelegate(ListenClient); IAsyncResult result = d.BeginInvoke(out newClient, null, null); //使用轮询方式来判断异步操作是否完成 while (result.IsCompleted == false) { if (isExit) { break; } Thread.Sleep(250); } //获取Begin方法的返回值和所有输入/输出参数 d.EndInvoke(out newClient, result); if (newClient != null) { //每接受一个客户端连接,就创建一个对应的线程循环接收该客户端发来的信息 User user = new User(newClient); Thread threadReceive = new Thread(ReceiveData); threadReceive.Start(user); userList.Add(user); service.AddItem(string.Format("[{0}]进入", newClient.Client.RemoteEndPoint)); service.AddItem(string.Format("当前连接用户数:{0}", userList.Count)); } else { break; } } }