package tools; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import org.apache.log4j.Logger; import protocol.ProtoHead; import protocol.Data.ChatData.ChatItem; import protocol.Data.ChatData.ChatItem.TargetType; import protocol.Msg.LoginMsg.LoginRsp; import protocol.Msg.ReceiveChatMsg.ReceiveChatSync; import protocol.Msg.SendChatMsg.SendChatReq; import server.NetworkPacket; import JUnit.ClientSocket; /** * 一个自动回复其他用户发来消息的插件 * * @author Feng * */ public class AutoResponseClient { private ClientSocket clientSocket; private Logger logger = Logger.getLogger(this.getClass()); public AutoResponseClient() throws UnknownHostException, IOException { String user = "AutoResponse"; clientSocket = new ClientSocket(); clientSocket.host = "127.0.0.1"; // clientSocket.link(); if (clientSocket.login(user, user) != LoginRsp.ResultCode.SUCCESS) { // Debug.log("AutoResponseClient", "自动回复器登陆失败!"); logger.error("AutoResponseClient : AutoResponse Login Error!"); // System.err.println("AutoResponseClient : 自动回复器登陆失败!"); return; } logger.info("AutoResponse Login Successful! Start working"); byte[] arrayBytes; while (true) { arrayBytes = clientSocket.readFromServerWithoutKeepAlive(ProtoHead.ENetworkMessage.RECEIVE_CHAT_SYNC); // if (NetworkPacket.getMessageType(arrayBytes) != ProtoHead.ENetworkMessage.RECEIVE_CHAT_SYNC) // continue; // 将同样的消息发回给发送者 ReceiveChatSync receiveChatting = ReceiveChatSync.parseFrom(NetworkPacket.getMessageObjectBytes(arrayBytes)); ChatItem receiveChatItem = receiveChatting.getChatData(0); logger.info("AutoResponse get a Chatting : " + ClientSocket.getChatItemInfo(receiveChatItem)); ChatItem.Builder sendChatItem = ChatItem.newBuilder(); if (receiveChatItem.getTargetType() == TargetType.INDIVIDUAL){ sendChatItem.setSendUserId(receiveChatItem.getReceiveUserId()); sendChatItem.setReceiveUserId(receiveChatItem.getSendUserId()); } else if (receiveChatItem.getTargetType() == TargetType.GROUP){ sendChatItem.setSendUserId(user); } sendChatItem.setChatBody(receiveChatItem.getChatBody()); sendChatItem.setChatType(receiveChatItem.getChatType()); SendChatReq.Builder sendChattingObj = SendChatReq.newBuilder(); sendChattingObj.setChatData(sendChatItem); clientSocket.writeToServer(NetworkPacket.packMessage(ProtoHead.ENetworkMessage.SEND_CHAT_REQ_VALUE, sendChattingObj .build().toByteArray())); logger.info("AutoResponse response a Chatting"); } } }