package chat.handler; import java.util.Date; import java.util.List; import com.google.gson.Gson; import chat.module.ChatroomBucket; import chat.module.entity.ChatRoom; import chat.module.entity.Member; import chat.module.entity.MessageRecord; import chat.module.entity.PublishOperator; import chat.server.call.CallObject; import cn.wildfirechat.proto.WFCMessage; import io.netty.handler.codec.http.HttpResponseStatus; public class ChatRoomHandler extends CallObject { private static ChatroomBucket chatroomBucket; static { chatroomBucket = ChatroomBucket.getInstance(); } @Override protected void publishMethod() { addOneMethod("create"); addOneMethod("destroy"); addOneMethod("getInfo"); addOneMethod("getRoomList"); addOneMethod("join"); addOneMethod("leave"); addOneMethod("kickoff"); addOneMethod("pull"); addOneMethod("publish"); } public void create() { String roomName = dataPool.getString("roomName"); //1. add room // chatroomBucket.createOne(roomName, user); //2. result resultPool.success(); } public void destroy() { String userId = user.getId(); String roomId = dataPool.getString("roomId"); //1. notify members ChatRoom chatRoom = chatroomBucket.getOne(roomId); chatRoom.notify(PublishOperator.Destroy, userId); //2. delete room chatroomBucket.deleteOne(roomId); //3. result resultPool.success(); } public void chatRoomInfo() throws Exception { //头 WFCMessage.GetChatroomInfoRequest request = (WFCMessage.GetChatroomInfoRequest) dataPool.getWFCMessage(WFCMessage.GetChatroomInfoRequest.class); //中 短连接使用 // RestResult result = null; // dataPool.getResponse().setStatus(HttpResponseStatus.OK); // dataPool.getResponse().setContent(new Gson().toJson(result)); //尾 //handle WFCMessage.ChatroomInfo info = null; int memberCount = 10; byte[] bytes = info.toBuilder().setMemberCount(memberCount).build().toByteArray(); resultPool.setBytes(bytes); } public void getChatRoomMember() throws Exception { //头 WFCMessage.GetChatroomMemberInfoRequest request = (WFCMessage.GetChatroomMemberInfoRequest) dataPool.getWFCMessage(WFCMessage.GetChatroomMemberInfoRequest.class); //中 短连接 // RestResult result = null; // dataPool.getResponse().setStatus(HttpResponseStatus.OK); // dataPool.getResponse().setContent(new Gson().toJson(result)); //尾 WFCMessage.ChatroomMemberInfo info = null; byte[] bytes = info.toByteArray(); resultPool.setBytes(bytes); } public void joinChatRoom() throws Exception { //头 WFCMessage.IDBuf request = (WFCMessage.IDBuf) dataPool.getWFCMessage(WFCMessage.IDBuf.class); //尾 resultPool.setBytes(null); } public void getInfo() { String roomId = dataPool.getString("roomId"); ChatRoom chatRoom = chatroomBucket.getOne(roomId); resultPool.add(chatRoom); } public void getRoomList() { List roomlist = chatroomBucket.getAll(); resultPool.add(roomlist); } public void join() { String userId = user.getId(); String roomId = dataPool.getString("roomId"); ChatRoom chatRoom = chatroomBucket.getOne(roomId); if (chatRoom == null) { return; } //1. notify chatRoom.notify(PublishOperator.Join, userId); //2. add member Member member = new Member(roomId, ""); chatRoom.addOneMember(member); //3. result resultPool.success(); } public void leave() throws Exception { String userId = user.getId(); String roomId = dataPool.getString("roomId"); ChatRoom chatRoom = chatroomBucket.getOne(roomId); if (chatRoom == null) { return; } //1. notify chatRoom.notify(PublishOperator.Leave, userId); //2. delete member chatRoom.deleteOneMember(userId); //3. result resultPool.success(); } public void kickoff() throws Exception { String userId = user.getId(); String roomId = dataPool.getString("roomId"); ChatRoom chatRoom = chatroomBucket.getOne(roomId); if (chatRoom == null) { return; } //1. notify chatRoom.notify(PublishOperator.KickOff, userId); //2. delete member chatRoom.deleteOneMember(userId); //3. result resultPool.success(); } protected void pull() { String roomId = dataPool.getString("roomId"); long timeStamp = Long.parseLong(dataPool.getString("timePoint")); ChatRoom chatRoom = chatroomBucket.getOne(roomId); if (chatRoom == null) { return; } //1. get message list List messageList = chatRoom.getMessageList(timeStamp); //2. result resultPool.add(messageList); } protected void publish() { //1. String roomId = dataPool.getString("roomId"); MessageRecord record = dataPool.getMessageRecord(); ChatRoom chatRoom = chatroomBucket.getOne(roomId); if (chatRoom == null) { return; } //1. add to message list //chatRoom.publishOneMessage(record, user, true, null); //2. publish chatRoom.notify(PublishOperator.PublishMessage, record, user); //3. result resultPool.success(); } }