package chat.handler; import java.util.Date; import java.util.List; import chat.module.ChannelBucket; import chat.module.entity.Channel; import chat.module.entity.MessageRecord; import chat.module.entity.PublishOperator; import chat.server.call.CallObject; import cn.wildfirechat.proto.WFCMessage; public class ChannelHandler extends CallObject { private static ChannelBucket channelBucket; static { channelBucket = ChannelBucket.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 channelName = dataPool.getString("channelName"); //1. create // channelBucket.createOne(channelName, user); //2. result resultPool.success(); } public void destroy() { String channelId = dataPool.getString("channelId"); Channel channel = channelBucket.getOne(channelId); if (channel == null) { return; } //1. notify members channel.notify(PublishOperator.Destroy, user); //2. delete room channelBucket.deleteOne(channelId); //3. result resultPool.success(); } public void pullChannel() throws Exception { //头 WFCMessage.PullChannelInfo request = (WFCMessage.PullChannelInfo) dataPool.getWFCMessage(WFCMessage.PullChannelInfo.class); //尾 WFCMessage.ChannelInfo info = null;//m_messagesStore.getChannelInfo(request.getChannelId()); byte[] resBytes = info.toByteArray(); resultPool.setBytes(resBytes); } public void getInfo() { String channelId = dataPool.getString("channelId"); Channel channel = channelBucket.getOne(channelId); resultPool.add(channel); } public void getChannelList() { List channeList = channelBucket.getAll(); resultPool.add(channeList); } public void subscribe() { String channelId = dataPool.getString("channelId"); Channel channel = channelBucket.getOne(channelId); if (channel == null) { return; } //1. add subscriber channel.join(channelId, user); } public void unsubscribe() { String channelId = dataPool.getString("channelId"); Channel channel = channelBucket.getOne(channelId); if (channel == null) { return; } //1. delete member channel.leave(user); } protected void pull() { String channelId = dataPool.getString("channelId"); long timeStamp = Long.parseLong(dataPool.getString("timePoint")); Channel channel = channelBucket.getOne(channelId); if (channel == null) { return; } //1. get message list List messageList = channel.getMessageList(timeStamp); //2. result resultPool.add(messageList); } protected void publish() { //1. String channelId = dataPool.getString("channelId"); MessageRecord record = dataPool.getMessageRecord(); Channel channel = channelBucket.getOne(channelId); if (channel == null) { return; } //1. add to message list //channel.publishOneMessage(record, user, true, null); //2. publish channel.notify(PublishOperator.PublishMessage, record, user); //3. result resultPool.success(); } }