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<ChatRoom> 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<MessageRecord> 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();
|
}
|
}
|