/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.core.entity.content.internal;
import java.io.IOException;
import im.actor.core.api.ApiMessage;
import im.actor.runtime.bser.BserParser;
import im.actor.runtime.bser.BserValues;
import im.actor.runtime.bser.BserWriter;
import im.actor.runtime.bser.DataInput;
import im.actor.runtime.bser.DataOutput;
// Disabling Bounds checks for speeding up calculations
/*-[
#define J2OBJC_DISABLE_ARRAY_BOUND_CHECKS 1
]-*/
public abstract class AbsContentContainer {
private static final int TYPE_LOCAL = 0;
private static final int TYPE_REMOTE = 1;
public static AbsContentContainer loadContainer(byte[] data) throws IOException {
BserValues values = new BserValues(BserParser.deserialize(new DataInput(data)));
int type = values.getInt(1);
byte[] content = values.getBytes(2);
if (type == TYPE_LOCAL) {
return new ContentLocalContainer(AbsLocalContent.loadContainer(content));
} else if (type == TYPE_REMOTE) {
return new ContentRemoteContainer(ApiMessage.fromBytes(content));
} else {
throw new IOException("Unknown type");
}
}
public byte[] buildContainer() throws IOException {
DataOutput res = new DataOutput();
BserWriter writer = new BserWriter(res);
if (this instanceof ContentLocalContainer) {
writer.writeInt(1, TYPE_LOCAL);
writer.writeBytes(2, ((ContentLocalContainer) this).getContent().buildContainer());
} else if (this instanceof ContentRemoteContainer) {
writer.writeInt(1, TYPE_REMOTE);
writer.writeBytes(2, ((ContentRemoteContainer) this).getMessage().buildContainer());
} else {
throw new IOException("Unknown type");
}
return res.toByteArray();
}
}