equivalent-exchange-3/src/main/java/com/pahimar/ee3/network/message/MessageSyncEnergyValues.java

127 lines
3.9 KiB
Java
Raw Normal View History

package com.pahimar.ee3.network.message;
2015-05-03 01:23:35 +02:00
import com.google.gson.stream.JsonReader;
2015-05-07 19:45:06 +02:00
import com.pahimar.ee3.api.exchange.EnergyValue;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
2015-05-03 01:23:35 +02:00
import com.pahimar.ee3.exchange.EnergyValueStackMapping;
import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.util.CompressionHelper;
import com.pahimar.ee3.util.LogHelper;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import java.io.IOException;
2015-05-03 01:23:35 +02:00
import java.io.StringReader;
import java.util.Map;
import java.util.TreeMap;
2014-09-11 22:13:39 +02:00
public class MessageSyncEnergyValues implements IMessage, IMessageHandler<MessageSyncEnergyValues, IMessage>
{
2015-05-03 01:23:35 +02:00
public String jsonEnergyValueRegistry;
2014-09-11 22:13:39 +02:00
public MessageSyncEnergyValues()
{
}
2014-09-11 22:13:39 +02:00
public MessageSyncEnergyValues(EnergyValueRegistry energyValueRegistry)
{
2015-05-03 01:23:35 +02:00
this.jsonEnergyValueRegistry = energyValueRegistry.toJson();
}
/**
* Convert from the supplied buffer into your specific message type
*
* @param buf
*/
@Override
public void fromBytes(ByteBuf buf)
{
2015-05-03 01:23:35 +02:00
byte[] compressedBytes = null;
int readableBytes = buf.readInt();
if (readableBytes > 0)
{
2015-05-03 01:23:35 +02:00
compressedBytes = buf.readBytes(readableBytes).array();
}
2015-05-03 01:23:35 +02:00
if (compressedBytes != null)
{
2015-05-03 01:23:35 +02:00
this.jsonEnergyValueRegistry = CompressionHelper.decompressStringFromByteArray(compressedBytes);
}
}
/**
* Deconstruct your message into the supplied byte buffer
*
* @param buf
*/
@Override
public void toBytes(ByteBuf buf)
{
2015-05-03 01:23:35 +02:00
byte[] compressedBytes = null;
2015-05-03 01:23:35 +02:00
if (jsonEnergyValueRegistry != null)
{
2015-05-03 01:23:35 +02:00
compressedBytes = CompressionHelper.compressStringToByteArray(jsonEnergyValueRegistry);
}
2015-05-03 01:23:35 +02:00
if (compressedBytes != null)
{
2015-05-03 01:23:35 +02:00
buf.writeInt(compressedBytes.length);
buf.writeBytes(compressedBytes);
}
else
{
buf.writeInt(0);
}
}
/**
* Called when a message is received of the appropriate type. You can optionally return a reply message, or null if no reply
* is needed.
*
* @param message The message
* @param ctx
* @return an optional return message
*/
@Override
2014-09-11 22:13:39 +02:00
public IMessage onMessage(MessageSyncEnergyValues message, MessageContext ctx)
{
2015-05-03 01:23:35 +02:00
if (message.jsonEnergyValueRegistry != null)
{
2015-05-03 01:23:35 +02:00
Map<WrappedStack, EnergyValue> energyValueStackMap = new TreeMap<WrappedStack, EnergyValue>();
try
{
JsonReader jsonReader = new JsonReader(new StringReader(message.jsonEnergyValueRegistry));
jsonReader.beginArray();
while (jsonReader.hasNext())
{
EnergyValueStackMapping energyValueStackMapping = EnergyValueStackMapping.jsonSerializer.fromJson(jsonReader, EnergyValueStackMapping.class);
if (energyValueStackMapping != null)
{
energyValueStackMap.put(energyValueStackMapping.wrappedStack, energyValueStackMapping.energyValue);
}
}
jsonReader.endArray();
jsonReader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
EnergyValueRegistry.getInstance().loadFromMap(energyValueStackMap);
LogHelper.info(EnergyValueRegistry.ENERGY_VALUE_MARKER, "Client successfully received EnergyValues from server");
}
else
{
LogHelper.info(EnergyValueRegistry.ENERGY_VALUE_MARKER, "Client failed to receive EnergyValues from server - falling back to local EnergyValues");
}
return null;
}
}