Ejemplo n.º 1
0
 public void SendToOne(GoUser user, string str)
 {
     try
     {
         user.sw.WriteLine(str);
         user.sw.Flush();
         AddItem(string.Format("sendto{0} sth{1} ", user.userName, str));
     }
     catch
     {
         AddItem(string.Format("fail send to{0}", user.userName));
     }
 }
Ejemplo n.º 2
0
 private void RemoveClientfromPlayer(GoUser 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;
                 }
             }
         }
     }
 }
Ejemplo n.º 3
0
 private void ListenClientConnect()
 {
     while (true)
     {
         TcpClient newclient = null;
         try
         {
             //wait for users
             newclient = myListener.AcceptTcpClient();
         }
         catch
         {
             break;
         }
         ParameterizedThreadStart pts = new ParameterizedThreadStart(ReciveData);
         Thread threadReceive         = new Thread(pts);
         GoUser user = new GoUser(newclient);
         threadReceive.Start(user);
         userlist.Add(user);
         service.AddItem(string.Format("{0} in ", newclient.Client.RemoteEndPoint));
         service.AddItem(string.Format("usercount :{0}", userlist.Count));
     }
 }
Ejemplo n.º 4
0
        private void ReciveData(object obj)
        {
            GoUser    user       = (GoUser)obj;
            TcpClient client     = user.client;
            bool      normalExit = false;
            bool      exitWhile  = false;

            while (exitWhile == false)
            {
                string receiveString = null;
                try
                {
                    receiveString = user.sr.ReadLine();
                }
                catch
                {
                    service.AddItem("receving error!");
                }
                //tcpclient 对象套接字进行了封装,如果tcpclient对象关闭了但是底层套借此未关闭并不产生异常,但是读取结果为null
                if (receiveString == null)
                {
                    if (normalExit == false)
                    {
                        //if stoped ,connected is false
                        if (client.Connected == true)
                        {
                            service.AddItem(string.Format("与{0}失去联系,已经终止接受改用户信息", client.Client.RemoteEndPoint));
                        }
                        RemoveClientfromPlayer(user);
                    }
                    break;
                }
                service.AddItem(string.Format("from :{0}:{1}", user.userName, receiveString));
                string[] splitstring = receiveString.Split(',');
                int      tableIndex  = -1;
                int      side        = -1;
                int      anotherSide = -1;
                string   sendString  = "";
                string   command     = splitstring[0].ToLower();
                switch (command)
                {
                case "login":
                    if (userlist.Count > maxUsers)
                    {
                        sendString = "sorry";
                        service.SendToOne(user, sendString);
                        service.AddItem(" more people ,refuse " + splitstring[1] + " in");
                        exitWhile = true;
                    }
                    else
                    {
                        //将用户昵称保存在用户表中
                        //由于是引用类型,因此直接给user赋值也就是给userlist中的user赋值
                        user.userName = string.Format("[{0}--{1}]", splitstring[1], client.Client.RemoteEndPoint);

                        sendString = "Tables," + this.GetOnlineString();
                        service.SendToOne(user, sendString);
                    }
                    break;

                case "logout":
                    service.AddItem(string.Format("{0} log off", user.userName));
                    normalExit = true;
                    exitWhile  = true;
                    break;

                case "sitdown":
                    tableIndex = int.Parse(splitstring[1]);
                    side       = int.Parse(splitstring[2]);
                    gameTable[tableIndex].gamePlayer[side].user    = user;
                    gameTable[tableIndex].gamePlayer[side].someone = true;
                    service.AddItem(string.Format("{0} setin {1}table {2}sites", user.userName, tableIndex + 1, side + 1));
                    anotherSide = (side + 1) % 2;
                    if (gameTable[tableIndex].gamePlayer[anotherSide].someone == true)
                    {
                        sendString = string.Format("SitDown,{0},{1}", anotherSide, gameTable[tableIndex].gamePlayer[anotherSide].user.userName);
                        service.SendToOne(user, sendString);
                    }
                    sendString = string.Format("SitDown,{0},{1}", anotherSide, gameTable[tableIndex].gamePlayer[anotherSide].user.userName);
                    service.SendToBoth(gameTable[tableIndex], sendString);
                    //send to all
                    service.SendToAll(userlist, "Tables," + this.GetOnlineString());
                    break;

                case "getup":
                    tableIndex = int.Parse(splitstring[1]);
                    side       = int.Parse(splitstring[2]);
                    service.AddItem(string.Format("{0}left,retrun to room", user.userName));
                    gameTable[tableIndex].StopTimer();
                    service.SendToBoth(gameTable[tableIndex], string.Format("Getup,{0},{1}", side, user.userName));
                    gameTable[tableIndex].gamePlayer[side].someone = false;
                    gameTable[tableIndex].gamePlayer[side].started = false;
                    gameTable[tableIndex].gamePlayer[side].grade   = 0;
                    anotherSide = (side + 1) % 2;
                    if (gameTable[tableIndex].gamePlayer[anotherSide].someone == true)
                    {
                        gameTable[tableIndex].gamePlayer[anotherSide].started = false;
                        gameTable[tableIndex].gamePlayer[anotherSide].grade   = 0;
                    }
                    service.SendToAll(userlist, "Tables," + this.GetOnlineString());
                    break;

                case "level":
                    tableIndex = int.Parse(splitstring[1]);
                    gameTable[tableIndex].SetTimerLevel((6 - int.Parse(splitstring[2])) * 100);
                    service.SendToBoth(gameTable[tableIndex], receiveString);
                    break;

                case "talk":
                    tableIndex = int.Parse(splitstring[1]);
                    sendString = string.Format("Talk,{0},{1}", user.userName, receiveString.Substring(splitstring[0].Length + splitstring[1].Length));
                    service.SendToBoth(gameTable[tableIndex], sendString);
                    break;

                case "start":
                    tableIndex = int.Parse(splitstring[1]);
                    side       = int.Parse(splitstring[2]);
                    gameTable[tableIndex].gamePlayer[side].started = true;
                    if (side == 0)
                    {
                        anotherSide = 1;
                        sendString  = "Message,黑方已经开始。";
                    }
                    else
                    {
                        anotherSide = 0;
                        sendString  = "Message,白方已经开始。";
                    }
                    service.SendToBoth(gameTable[tableIndex], sendString);
                    if (gameTable[tableIndex].gamePlayer[anotherSide].started == true)
                    {
                        gameTable[tableIndex].ResetGrid();
                        gameTable[tableIndex].StartTimer();
                    }
                    break;

                case "unsetdot":
                    tableIndex = int.Parse(splitstring[1]);
                    side       = int.Parse(splitstring[2]);
                    int xi    = int.Parse(splitstring[3]);
                    int xj    = int.Parse(splitstring[4]);
                    int color = int.Parse(splitstring[5]);
                    gameTable[tableIndex].UnsetDot(xi, xj, color);
                    break;

                default:
                    service.SendToAll(userlist, "unkown " + receiveString);
                    break;
                }
            }
            userlist.Remove(user);
            client.Close();
            service.AddItem(string.Format("有一个退出,剩余连接用户数:{0}", userlist.Count));
        }