Пример #1
0
			static void append( sList list, sFace face )
			{
				face.l = null;
				face.l[1] = list.root;
				if( list.root != null ) list.root.l[0] = face;
				list.root = face;
				++list.count;
			}
Пример #2
0
			static void remove( sList list, sFace face )
			{
				if( face.l[1] != null ) face.l[1].l[0] = face.l[0];
				if( face.l[0] != null ) face.l[0].l[1] = face.l[1];
				if( face == list.root ) list.root = face.l[1];
				--list.count;
			}
Пример #3
0
        //Code số câu hỏi

        public void receive(object obj)
        {
            Socket client = obj as Socket;

            byte[] recv     = new byte[1];
            int    recvByte = -1;

            try
            {
                while (true)
                {
                    string text = "";
                    do
                    {
                        recvByte = client.Receive(recv);
                        text    += Encoding.UTF8.GetString(recv);
                    } while (text[text.Length - 1] != '\n');

                    if (text.StartsWith("NEWROOM%")) // Create ID Room and add client to room
                    {
                        // định dạng nhận từ client NEWROOM%tên người tạo
                        string[] temp   = text.Split('%');
                        Random   random = new Random();
                        int      idroom = random.Next(1000, 9999);

                        if (text.Contains("single") == false)
                        {
                            //check idroom in database
                            Byte[] data = Encoding.UTF8.GetBytes("IDR%" + idroom.ToString()); //send newly created ID_ROOM to the Client
                            client.Send(data);
                        }

                        for (int i = 0; i < 20; i++)
                        {
                            if (lists[i] == null)
                            {
                                lists[i] = new sList();
                                //int j = FindPosSocket(client);
                                lists[i].listname.Add(temp[1]);

                                clientList.Remove(client);
                                clientname.Remove(temp[1]);
                                lists[i].listsockets.Add(client);
                                lists[i].ID_ROOM = idroom;
                                i = 20;
                            }
                        }
                    }
                    else if (text.StartsWith("QTN"))
                    {
                        int i = FindROOM(client);

                        string question = Getquestion(i);

                        infoMessage(question);
                        Byte[] data = Encoding.UTF8.GetBytes(question);
                        client.Send(data);

                        //định dạng server khi gửi là QTN%TN/TL%mã câu hỏi%nội dung câu hỏi
                    }

                    else if (text.StartsWith("sing"))
                    {
                        Byte[] data = Encoding.UTF8.GetBytes("Hello");
                        client.Send(data);
                    }

                    else if (text.StartsWith("ROOMS")) //get ID ROOMS
                    {
                        string sdata = "";

                        for (int i = 0; i < 20; i++)//send all ID_ROOM to the Client
                        {
                            if (lists[i] != null && lists[i].ID_ROOM != 0)
                            {
                                //cấu trúc id%số người chơi hiện tại
                                sdata = lists[i].ID_ROOM.ToString() + "              " + lists[i].listsockets.Count.ToString() + "/4";
                                infoMessage(sdata);
                                Byte[] data = Encoding.UTF8.GetBytes(sdata);
                                client.Send(data);
                            }
                        }
                    }
                    else if (text.StartsWith("PLR"))//gửi tên người chơi trong Room
                    {
                        string data = "PLR";

                        int i = FindROOM(client);
                        //lấy tên client

                        int numberclient = lists[i].listname.Count;
                        foreach (string item in lists[i].listname)
                        {
                            data += "%" + item;
                        }

                        if (numberclient == 2)
                        {
                            data += "%%";
                        }
                        if (numberclient == 3)
                        {
                            data += "%";
                        }

                        Byte[] sdata = Encoding.UTF8.GetBytes(data);

                        foreach (Socket socket in lists[i].listsockets)
                        {
                            socket.Send(sdata);
                            infoMessage(data + socket.RemoteEndPoint.ToString());
                        }
                        client.Send(sdata);

/*
 *                      for (int i = 0; i < 20; i++)
 *                      {
 *                          if (lists[i] != null)
 *                          {
 *                              foreach (Socket socket in lists[i].listsockets)
 *                              {
 *                                  if (socket != null && socket == client)
 *                                  {
 *                                      foreach (string sname in lists[i].listname)
 *                                      {
 *                                          data += "%" + sname;
 *                                      }
 *                                      //cấu trúc PLR%name1%name2%name3%name4
 *                                      Byte[] sdata = Encoding.UTF8.GetBytes(data);
 *                                      client.Send(sdata);
 *                                      break;
 *                                  }
 *                              }
 *                          }
 *                      }*/
                    }
                    else if (text.StartsWith("GO")) //trưởng phòng sẽ gửi nhãn này
                    {
                        infoMessage(client.RemoteEndPoint.ToString() + "   " + text);
                        for (int i = 0; i < 20; i++)
                        {
                            if (lists[i] != null)
                            {
                                foreach (Socket socket in lists[i].listsockets)
                                {
                                    if (socket != null && socket == client)
                                    {
                                        if (lists[i].listsockets.Count == lists[i].RDY)
                                        {
                                            Byte[] data = Encoding.UTF8.GetBytes("GO%1");
                                            client.Send(data);
                                            foreach (Socket item in lists[i].listsockets)
                                            {
                                                if (item != null)
                                                {
                                                    item.Send(data);
                                                }
                                            }
                                            //Getquestion(i);
                                        }
                                        else
                                        {
                                            Byte[] data = Encoding.UTF8.GetBytes("GO%0");
                                            client.Send(data);
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }

                    else if (text.StartsWith("STS%"))//xác định trạng thái các client đã sẵn sàng hay chưa
                    {
                        //STS%name%0/1
                        infoMessage(text);
                        string[] sname = text.Split('%');
                        int      z     = Int32.Parse(sname[2]);
                        if (z == 1)
                        {
                            for (int i = 0; i < 20; i++)
                            {
                                if (lists[i] != null)
                                {
                                    foreach (Socket item in lists[i].listsockets)
                                    {
                                        if (item != null)
                                        {
                                            if (client == item)
                                            {
                                                lists[i].RDY += 1;
                                                int x = 1;
                                                foreach (Socket items in lists[i].listsockets)
                                                {
                                                    if (items != null)
                                                    {
                                                        Byte[] data = Encoding.UTF8.GetBytes("RDY%" + x.ToString());
                                                        item.Send(data);
                                                    }
                                                    x++;
                                                }
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            int x = -1;
                            for (int i = 0; i < 20; i++)
                            {
                                if (lists[i] != null)
                                {
                                    foreach (Socket item in lists[i].listsockets)
                                    {
                                        if (item != null)
                                        {
                                            if (client == item)
                                            {
                                                lists[i].RDY -= 1;
                                                foreach (Socket items in lists[i].listsockets)
                                                {
                                                    if (items != null)
                                                    {
                                                        Byte[] data = Encoding.UTF8.GetBytes("STS%" + sname[1] + "%0");
                                                        item.Send(data);
                                                    }
                                                }
                                                x = i;
                                            }
                                        }
                                    }
                                }
                            }
                            if (x > -1)
                            {
                                lists[x].listsockets.Remove(client);
                                clientList.Add(client);
                            }
                        }
                    }
                    else if (text.StartsWith("JOI%"))  //add client to existing ID_ROOM
                    {
                        string[] sLobby = text.Split('%');
                        int      id     = int.Parse(sLobby[1]);
                        int      i;

                        for (i = 0; i < 20; i++)
                        {
                            if (lists[i] != null && id == lists[i].ID_ROOM)
                            {
                                if (lists[i].listsockets.Count < lists[i].Type)      //Allow client to add ROOM
                                {
                                    try
                                    {
                                        int j = FindPosSocket(client);
                                        lists[i].listsockets.Add(client);
                                        clientList.Remove(client);
                                        lists[i].listname.Add(clientname[j]);
                                        clientname.Remove(clientname[j]);
                                    }
                                    catch
                                    {
                                        MessageBox.Show("Lỗi");
                                    }
                                    //lấy tên của client từ database lưu vào list[i].listname
                                    //Byte[] data = Encoding.UTF8.GetBytes("OK");
                                    //client.Send(data);
                                }


                                break;
                            }
                        }
                        if (i == 20)
                        {
                            Byte[] data = Encoding.UTF8.GetBytes("ERR");
                            client.Send(data);
                        }
                    }
                    else if (text.StartsWith("TRT%"))
                    {
                        //gửi giải thích câu hỏi
                    }
                    else if (text.StartsWith("LIV"))
                    {
                        string[] sdata = text.Split('%');
                        int      liv   = Int32.Parse(sdata[1]);

                        for (int i = 0; i < 20; i++)
                        {
                            if (lists[i] != null)
                            {
                                int count = 0;
                                foreach (Socket socket in lists[i].listsockets)
                                {
                                    if (socket != null && socket == client)
                                    {
                                        int die = 0; //tính số client có mạng =0
                                        lists[i].live[count] = liv;

                                        if (liv == 0)
                                        {
                                            die++;
                                        }

                                        //Nếu tất cả người chơi đều có số mạng là 0 thì gửi nhãn EGE để kết thúc
                                        if ((die == lists[i].listsockets.Count - 1) && lists[i].listsockets.Count > 1)
                                        {
                                            foreach (Socket items in clientList)
                                            {
                                                if (items != null)
                                                {
                                                    Byte[] data = Encoding.UTF8.GetBytes("EGE");
                                                    items.Send(data);
                                                }
                                            }
                                        }
                                        else if (die == lists[i].listsockets.Count)
                                        {
                                            Byte[] data = Encoding.UTF8.GetBytes("EGE");
                                            client.Send(data);
                                            infoMessage("EGE");
                                        }
                                    }
                                    count++;
                                }
                            }
                        }
                    }
                    else if (text.StartsWith("LIF"))
                    {
                        //trả về số mạng các người chơi trong phòng
                        int    i    = FindROOM(client);
                        string data = "LIF";
                        for (int j = 0; j < lists[i].listsockets.Count; j++)
                        {
                            data += "%" + lists[i].live[j].ToString();
                        }

                        Byte[] sdata = Encoding.UTF8.GetBytes(data);

                        foreach (Socket socket in lists[i].listsockets)
                        {
                            if (socket != null)
                            {
                                socket.Send(sdata);
                            }
                        }
                    }
                    else
                    {
                        chat(client, text);
                    }
                    infoMessage(client.RemoteEndPoint + ": " + text);
                }
            }
            catch
            {
                clientList.Remove(client);
                client.Close();
            }
        }