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