Пример #1
0
 /// <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);
 }
Пример #2
0
 /// <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));
     }
 }
Пример #3
0
 /// <summary>接受客户端发来的信息</summary>
 private void ReceiveMessage(User user, out string receiveMessage)
 {
     try
     {
         receiveMessage = user.sr.ReadLine();
     }
     catch (Exception ex)
     {
         service.AddItem(ex.Message);
         receiveMessage = null;
     }
 }
Пример #4
0
 /// <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;
                 }
             }
         }
     }
 }
Пример #5
0
 /// <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;
         }
     }
 }