예제 #1
0
        public ChatClient(Form2 form2, ChatClientInformation userInfo)
        {
            // ChatClient 멤버변수 할당
            chatSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            form = form2;
            chatClientInfo = new ChatClientInformation();
            chatClientInfo = userInfo;
            readData = null;

            // socket을 채팅 서버에 연결, getMessage 스레드 시작
            chatSocket.Connect("127.0.0.1", 10000);
            this.sendMessage(this.chatClientInfo);
            Thread ctThread = new Thread(getMessage);
            ctThread.Start();
        }
예제 #2
0
        // 새로운 채팅 메세지를 채팅 서버에 보내는 메소드
        public void sendMessage(ChatClientInformation chatClientInfoFromForm2)
        {
            // 새로운 채팅 프로토콜 object 할당
            ChatProtocol chatProtocol = new ChatProtocol();

            // 채팅 프로토콜 object에, 클라이언트가 가지고 있던 정보 삽입
            chatProtocol.chat_target = chatClientInfoFromForm2.chat_target;
            chatProtocol.message = form.msgInput.Text;
            chatProtocol.sender_id = chatClientInfoFromForm2.user_id;

            // 채팅 모드에 따라 target id 정함
            if (chatProtocol.chat_target == CHAT_TARGET.CHAT_WHISPER || chatProtocol.chat_target == CHAT_TARGET.CHAT_GAMEROOM)
            {
                // 귓속말 모드이거나 방에 소속된 경우. 자신까지 채팅의 타겟으로 삽입
                chatProtocol.targetUserList.Add(chatClientInfo.user_id);

                // 귓속말 모드일 경우 타겟 유저 아이디를 리스트에 삽입
                if (chatProtocol.chat_target == CHAT_TARGET.CHAT_WHISPER)
                {
                    chatProtocol.targetUserList.Add(chatClientInfo.target_id);
                }

                // 방 채팅 모드일 경우 방에 접속한 유저 아이디를 리스트에 삽입
                if (chatProtocol.chat_target == CHAT_TARGET.CHAT_GAMEROOM)
                {
                    foreach (string chatMem in chatClientInfo.roomUserList)
                    {
                        chatProtocol.targetUserList.Add(chatMem);
                    }
                }
            }

            // 채팅 프로토콜을 Json으로 변환하여 소켓을 통해 서버로 전송
            Console.WriteLine(chatProtocol.message);
            string output = JsonConvert.SerializeObject(chatProtocol);
            byte[] outStream = System.Text.Encoding.UTF8.GetBytes(output);
            chatSocket.Send(outStream, SocketFlags.None);
            changeChatTarget(CHAT_TARGET.CHAT_ALL);
        }