package pl.radical.open.gg.packet.in;
import pl.radical.open.gg.IRemoteStatus;
import pl.radical.open.gg.IUser;
import pl.radical.open.gg.RemoteStatus;
import pl.radical.open.gg.User;
import pl.radical.open.gg.packet.AbstractGGIncomingPacket;
import pl.radical.open.gg.packet.GGIncomingPackage;
import pl.radical.open.gg.packet.IncomingPacket;
import pl.radical.open.gg.packet.dicts.GGStatuses;
import pl.radical.open.gg.packet.handlers.GGStatusPacketHandler;
import pl.radical.open.gg.utils.GGConversion;
import pl.radical.open.gg.utils.GGUtils;
/**
* @author <a href="mailto:mnaglik@gazeta.pl">Marcin Naglik</a>
* @author <a href="mailto:mati@sz.home.pl">Mateusz Szczap</a>
* @author <a href="mailto:lukasz.rzanek@radical.com.pl>Łukasz Rżanek</a>
*/
@IncomingPacket(type = 0x0002, label = "GG_STATUS", handler = GGStatusPacketHandler.class)
@Deprecated
public class GGStatus extends AbstractGGIncomingPacket implements GGStatuses, GGIncomingPackage {
private IUser user = null;
private RemoteStatus status = null;
public GGStatus(final byte[] data) {
handleUser(data);
handleStatus(data);
}
public IUser getUser() {
return user;
}
public IRemoteStatus getStatus() {
return status;
}
private void handleUser(final byte[] data) {
final int uin = GGUtils.byteToInt(data);
final int protocolStatus = GGUtils.unsignedByteToInt(data[4]);
final User.UserMode userMode = GGConversion.getUserMode(protocolStatus);
user = new User(uin, userMode);
}
private void handleStatus(final byte[] data) {
final int protocolStatus = GGUtils.unsignedByteToInt(data[4]);
String description = null;
long timeInMillis = -1;
if (protocolStatus == GGStatuses.GG_STATUS_AVAIL_DESCR || protocolStatus == GGStatuses.GG_STATUS_BUSY_DESCR || protocolStatus == GGStatuses.GG_STATUS_INVISIBLE_DESCR || protocolStatus == GGStatuses.GG_STATUS_NOT_AVAIL_DESCR) {
description = GGUtils.byteToString(data, 8);
if (data.length > 8 + description.length()) {
final int timeInSeconds = GGUtils.byteToInt(data, data.length - 4);
timeInMillis = GGUtils.secondsToMillis(timeInSeconds);
}
}
status = GGConversion.getClientRemoteStatus(protocolStatus, description, timeInMillis);
}
}