示例#1
0
        public void InitSocket()
        {
            TcpListener tl = new TcpListener(IPAddress.Parse("127.0.0.1"), 9999);

            tl.Start();
            winform_thread_display.DisplayText(">>> server start", richTextBox1);

            while (true)
            {
                try
                {
                    // 클라이언트 접속까지대기
                    TcpClient tc = tl.AcceptTcpClient();

                    User user = new User();
                    //user.chat_text_list = new List<string>();
                    user.tc = tc;
                    chat.user_list.Add(user);
                    // 각 클라이언트 별 clinet_number 컬렉션에 보관
                    user.user_name = count.ToString();
                    chat.Display_ServerOnUser_List();
                    count++;

                    winform_thread_display.DisplayText(">>> client connected", richTextBox1);

                    Data data = new Data()
                    {
                        keyword     = "ms",
                        room_number = "000",
                        user_name   = user.user_name,
                        user_list   = null,
                        room_list   = null,
                        msg         = ""
                    };
                    chat.Send_To_Client(tc, data);

                    Thread t = new Thread(new ParameterizedThreadStart(OnAccepted));
                    t.IsBackground = true;
                    t.Start(user);
                }
                catch (SocketException se)
                {
                    Console.WriteLine(se);
                    break;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    break;
                }
            }
        }
示例#2
0
        public void Make_Room(Data data_from_client)
        {
            if (data_from_client.keyword == "nr")
            {
                User user = Find_User(data_from_client.user_name);
                //이미 방이 존재
                if (Find_Room(data_from_client.msg) != null)
                {
                    Data data = new Data()
                    {
                        keyword     = "ms",
                        room_number = user.room_number ?? "000",
                        user_name   = user.user_name,
                        user_list   = null,
                        room_list   = null,
                        msg         = "from server to " + user.user_name + " : " + data_from_client.msg + "room exist"
                    };
                    Send_To_Client(user.tc, data);
                }
                else if (data_from_client.msg == "000")
                {
                    Data data = new Data()
                    {
                        keyword     = "ms",
                        room_number = user.room_number ?? "000",
                        user_name   = user.user_name,
                        user_list   = null,
                        room_list   = null,
                        msg         = "from server to " + user.user_name + " : " + data_from_client.msg + "can't make 0 room "
                    };
                    Send_To_Client(user.tc, data);
                }
                else
                {
                    // 기존에 참가한 방이있는지 확인
                    // 있으면 방에 방에있는 모두에게 메시지 + 방나가기 + 방인원 새로고침
                    string msg         = "from server to " + user.user_name + " leave room : " + user.room_number;
                    Room   room_before = Find_Room(user.room_number);
                    if (If_Join_Room(user))
                    {
                        string after_room_number = data_from_client.room_number;
                        data_from_client.room_number = user.room_number;

                        data_from_client.keyword = "ro";
                        Room_Out(data_from_client);
                        data_from_client.keyword = "nr";

                        Send_MS_All(room_before, msg);


                        data_from_client.room_number = after_room_number;
                    }

                    // 방만들기
                    Room room = new Room();
                    room.chat_text_tuple = new List <Tuple <int, string, string> >();
                    room.cur_user_list   = new List <User>();
                    room.room_number     = data_from_client.msg;
                    room.cur_user_list.Add(user);
                    room_list.Add(room);
                    user.room_number = data_from_client.msg;
                    Refresh_User(room_before);
                    Send_UL_All(room_before);

                    Display_RoomList(room.room_number);



                    Data data = new Data()
                    {
                        keyword     = "nr",
                        room_number = data_from_client.msg ?? "000",
                        user_name   = user.user_name,
                        user_list   = Make_User_List(room),
                        room_list   = null,
                        msg         = "you make room : " + user.room_number
                    };

                    winform_thread_display.DisplayText("from " + user.user_name + " make room : " + user.room_number, richTextBox1);
                    Send_To_Client(user.tc, data);
                }
            }
        }
示例#3
0
        public TcpClient InitSocket()
        {
            try
            {
                tc = new TcpClient("127.0.0.1", 9999);
                winformThreadDisplay.DisplayText(">>> server connected", richTextBoxMain);

                NetworkStream ns = tc.GetStream();
                //byte[] buffer = new byte[1024];

                //ns.Read(buffer, 0, buffer.Length);
                //string msg = Encoding.Unicode.GetString(buffer);

                BinaryFormatter bf = new BinaryFormatter();

                object test_obj       = bf.Deserialize(ns) as object;
                Data   dataFromServer = (Data)test_obj;
                user.user_name   = dataFromServer.user_name;
                user.room_number = dataFromServer.room_number;

                winformThreadDisplay.DisplayText(dataFromServer.user_name, textBox_name);
                winformThreadDisplay.DisplayText(dataFromServer.room_number, textBoxCurRoom);


                return(tc);
            }
            catch (SocketException se)
            {
                Console.WriteLine(se);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(null);
        }