添加PC下线功能

This commit is contained in:
heavyrain.lee
2020-04-24 12:08:17 +08:00
parent 1f45372b24
commit 93bb9b50ae
4 changed files with 55 additions and 0 deletions
@@ -0,0 +1,33 @@
/*
* This file is part of the Wildfire Chat package.
* (c) Heavyrain2012 <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
package io.moquette.imhandler;
import cn.wildfirechat.common.ErrorCode;
import cn.wildfirechat.pojos.GroupNotificationBinaryContent;
import cn.wildfirechat.proto.ProtoConstants;
import cn.wildfirechat.proto.WFCMessage;
import com.hazelcast.util.StringUtil;
import io.moquette.spi.impl.Qos1PublishHandler;
import io.netty.buffer.ByteBuf;
import static win.liyufan.im.IMTopic.KickoffGroupMemberTopic;
import static win.liyufan.im.IMTopic.KickoffPCClientTopic;
@Handler(value = KickoffPCClientTopic)
public class KickoffPCClientHandler extends GroupHandler<WFCMessage.IDBuf> {
@Override
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) {
String pcClientId = request.getId();
if (StringUtil.isNullOrEmpty(pcClientId)) {
return ErrorCode.INVALID_PARAMETER;
}
return m_sessionsStore.kickoffPCClient(fromUser, pcClientId);
}
}
@@ -653,6 +653,25 @@ public class MemorySessionStore implements ISessionsStore {
return sessions.get(clientID).secondPhaseStore.size();
}
@Override
public ErrorCode kickoffPCClient(String operator, String pcClientId) {
Session session = sessions.get(pcClientId);
if (session != null) {
if (session.getPlatform() == ProtoConstants.Platform.Platform_LINUX
|| session.getPlatform() == ProtoConstants.Platform.Platform_WEB
|| session.getPlatform() == ProtoConstants.Platform.Platform_Windows
|| session.getPlatform() == ProtoConstants.Platform.Platform_OSX) {
databaseStore.updateSessionDeleted(operator, pcClientId, 1);
sessions.remove(pcClientId);
mServer.getProcessor().kickoffSession(session);
} else {
return ErrorCode.ERROR_CODE_NOT_RIGHT;
}
}
return ErrorCode.ERROR_CODE_SUCCESS;
}
@Override
public void cleanSession(String clientID) {
LOG.info("Fooooooooo <{}>", clientID);
@@ -151,4 +151,6 @@ public interface ISessionsStore {
void cleanSession(String clientID);
boolean isMultiEndpointSupported();
ErrorCode kickoffPCClient(String operator, String pcClientId);
}
@@ -74,4 +74,5 @@ public interface IMTopic {
String DestroyUserTopic = "DESTROYUSER";
String LoadRemoteMessagesTopic = "LRM";
String KickoffPCClientTopic = "KPCC";
}