Files
rosetta-wss/src/main/java/im/rosetta/executors/Executor18GroupInfo.java

59 lines
2.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package im.rosetta.executors;
import java.util.ArrayList;
import im.rosetta.Failures;
import im.rosetta.client.tags.ECIAuthentificate;
import im.rosetta.database.entity.Group;
import im.rosetta.database.repository.GroupRepository;
import im.rosetta.packet.Packet18GroupInfo;
import io.orprotocol.ProtocolException;
import io.orprotocol.client.Client;
import io.orprotocol.packet.PacketExecutor;
public class Executor18GroupInfo extends PacketExecutor<Packet18GroupInfo> {
private final GroupRepository groupRepository = new GroupRepository();
@Override
public void onPacketReceived(Packet18GroupInfo packet, Client client) throws Exception, ProtocolException {
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
if(eciAuthentificate == null || !eciAuthentificate.hasAuthorized()){
/**
* Клиент не авторизован, он не может запрашивать информацию о группах
*/
client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED);
return;
}
String groupId = packet.getGroupId();
Group group = this.groupRepository.getGroup(groupId);
if(group == null || group.getMembersPublicKeys().size() <= 0) {
/**
* Если сервер возвращает пустой список участников,
* значит группы не существует, потому что
* пустая группа быть не может, так как они автоматически
* удаляются при выходе последнего участника
*/
packet.setMembersPKs(new ArrayList<>());
client.send(packet);
return;
}
if(!group.getMembersPublicKeys().contains(eciAuthentificate.getPublicKey())){
/**
* Клиент не является участником группы, значит его может быть
* исключили, возвращаем пустую информацию как будто группы нет.
*/
packet.setMembersPKs(new ArrayList<>());
client.send(packet);
return;
}
/**
* Отправляем клиенту список участников группы
*/
packet.setMembersPKs(group.getMembersPublicKeys());
client.send(packet);
}
}