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(); }
// 새로운 채팅 메세지를 채팅 서버에 보내는 메소드 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); }