2012-11-05 20:29:04 +01:00
|
|
|
package mekanism.common;
|
2012-08-15 22:41:41 +02:00
|
|
|
|
2014-06-02 16:52:13 +02:00
|
|
|
import io.netty.buffer.ByteBuf;
|
2012-10-14 03:48:29 +02:00
|
|
|
|
2014-06-02 16:52:13 +02:00
|
|
|
import java.util.ArrayList;
|
2012-09-03 18:11:25 +02:00
|
|
|
|
|
|
|
/**
|
2012-11-05 20:29:04 +01:00
|
|
|
* Mekanism packet handler. As always, use packets sparingly!
|
2012-09-03 18:11:25 +02:00
|
|
|
* @author AidanBrady
|
|
|
|
*
|
|
|
|
*/
|
2014-06-08 12:01:08 +02:00
|
|
|
public class PacketHandler
|
2012-08-15 22:41:41 +02:00
|
|
|
{
|
2013-06-15 17:05:14 +02:00
|
|
|
/**
|
|
|
|
* Encodes an Object[] of data into a DataOutputStream.
|
|
|
|
* @param dataValues - an Object[] of data to encode
|
|
|
|
* @param output - the output stream to write to
|
2014-06-02 16:52:13 +02:00
|
|
|
*/
|
|
|
|
public static void encode(Object[] dataValues, ByteBuf output)
|
2013-06-07 17:16:47 +02:00
|
|
|
{
|
|
|
|
try {
|
2014-03-08 02:00:25 +01:00
|
|
|
for(Object data : dataValues)
|
|
|
|
{
|
|
|
|
if(data instanceof Integer)
|
|
|
|
{
|
|
|
|
output.writeInt((Integer)data);
|
|
|
|
}
|
|
|
|
else if(data instanceof Boolean)
|
|
|
|
{
|
|
|
|
output.writeBoolean((Boolean)data);
|
|
|
|
}
|
|
|
|
else if(data instanceof Double)
|
|
|
|
{
|
|
|
|
output.writeDouble((Double)data);
|
|
|
|
}
|
|
|
|
else if(data instanceof Float)
|
|
|
|
{
|
|
|
|
output.writeFloat((Float)data);
|
|
|
|
}
|
|
|
|
else if(data instanceof String)
|
|
|
|
{
|
2014-06-02 16:52:13 +02:00
|
|
|
writeString(output, (String)data);
|
2014-03-08 02:00:25 +01:00
|
|
|
}
|
|
|
|
else if(data instanceof Byte)
|
|
|
|
{
|
|
|
|
output.writeByte((Byte)data);
|
|
|
|
}
|
|
|
|
else if(data instanceof int[])
|
|
|
|
{
|
|
|
|
for(int i : (int[])data)
|
|
|
|
{
|
|
|
|
output.writeInt(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(data instanceof byte[])
|
|
|
|
{
|
|
|
|
for(byte b : (byte[])data)
|
|
|
|
{
|
|
|
|
output.writeByte(b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(data instanceof ArrayList)
|
|
|
|
{
|
|
|
|
encode(((ArrayList)data).toArray(), output);
|
|
|
|
}
|
|
|
|
}
|
2013-06-07 17:16:47 +02:00
|
|
|
} catch(Exception e) {
|
2014-06-03 08:46:03 +02:00
|
|
|
Mekanism.logger.error("Error while encoding packet data.");
|
2014-03-08 02:00:25 +01:00
|
|
|
e.printStackTrace();
|
2013-06-07 17:16:47 +02:00
|
|
|
}
|
|
|
|
}
|
2014-06-02 16:52:13 +02:00
|
|
|
|
|
|
|
public static void writeString(ByteBuf output, String s)
|
|
|
|
{
|
|
|
|
output.writeInt(s.getBytes().length);
|
|
|
|
output.writeBytes(s.getBytes());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String readString(ByteBuf input)
|
|
|
|
{
|
|
|
|
return new String(input.readBytes(input.readInt()).array());
|
|
|
|
}
|
2012-08-15 22:41:41 +02:00
|
|
|
}
|