Merge branch 'simple-netw-improve' of github.com:diesieben07/FML
This commit is contained in:
commit
1419a02d13
|
@ -1,8 +1,12 @@
|
||||||
package cpw.mods.fml.common.network.simpleimpl;
|
package cpw.mods.fml.common.network.simpleimpl;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Level;
|
import org.apache.logging.log4j.Level;
|
||||||
|
|
||||||
import net.minecraft.network.INetHandler;
|
import net.minecraft.network.INetHandler;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
|
|
||||||
import cpw.mods.fml.common.FMLLog;
|
import cpw.mods.fml.common.FMLLog;
|
||||||
import cpw.mods.fml.common.network.FMLOutboundHandler;
|
import cpw.mods.fml.common.network.FMLOutboundHandler;
|
||||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||||
|
@ -12,18 +16,18 @@ import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.SimpleChannelInboundHandler;
|
import io.netty.channel.SimpleChannelInboundHandler;
|
||||||
|
|
||||||
public class SimpleChannelHandlerWrapper<REQ extends IMessage, REPLY extends IMessage> extends SimpleChannelInboundHandler<REQ> {
|
public class SimpleChannelHandlerWrapper<REQ extends IMessage, REPLY extends IMessage> extends SimpleChannelInboundHandler<REQ> {
|
||||||
private IMessageHandler<REQ, REPLY> messageHandler;
|
private final IMessageHandler<? super REQ, ? extends REPLY> messageHandler;
|
||||||
private Side side;
|
private final Side side;
|
||||||
public SimpleChannelHandlerWrapper(Class<? extends IMessageHandler<REQ, REPLY>> handler, Side side, Class<REQ> requestType)
|
|
||||||
|
public SimpleChannelHandlerWrapper(Class<? extends IMessageHandler<? super REQ, ? extends REPLY>> handler, Side side, Class<REQ> requestType)
|
||||||
|
{
|
||||||
|
this(SimpleNetworkWrapper.instantiate(handler), side, requestType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleChannelHandlerWrapper(IMessageHandler<? super REQ, ? extends REPLY> handler, Side side, Class<REQ> requestType)
|
||||||
{
|
{
|
||||||
super(requestType);
|
super(requestType);
|
||||||
try
|
messageHandler = Preconditions.checkNotNull(handler, "IMessageHandler must not be null");
|
||||||
{
|
|
||||||
messageHandler = handler.newInstance();
|
|
||||||
} catch (Exception e)
|
|
||||||
{
|
|
||||||
Throwables.propagate(e);
|
|
||||||
}
|
|
||||||
this.side = side;
|
this.side = side;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
package cpw.mods.fml.common.network.simpleimpl;
|
package cpw.mods.fml.common.network.simpleimpl;
|
||||||
|
|
||||||
import io.netty.channel.ChannelFutureListener;
|
import io.netty.channel.ChannelFutureListener;
|
||||||
|
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.network.INetHandler;
|
import net.minecraft.network.INetHandler;
|
||||||
import net.minecraft.network.Packet;
|
import net.minecraft.network.Packet;
|
||||||
|
@ -98,6 +102,31 @@ public class SimpleNetworkWrapper {
|
||||||
* @param side the side for the handler
|
* @param side the side for the handler
|
||||||
*/
|
*/
|
||||||
public <REQ extends IMessage, REPLY extends IMessage> void registerMessage(Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Class<REQ> requestMessageType, int discriminator, Side side)
|
public <REQ extends IMessage, REPLY extends IMessage> void registerMessage(Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Class<REQ> requestMessageType, int discriminator, Side side)
|
||||||
|
{
|
||||||
|
registerMessage(instantiate(messageHandler), requestMessageType, discriminator, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
static <REQ extends IMessage, REPLY extends IMessage> IMessageHandler<? super REQ, ? extends REPLY> instantiate(Class<? extends IMessageHandler<? super REQ, ? extends REPLY>> handler)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return handler.newInstance();
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Throwables.propagate(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a message and it's associated handler. The message will have the supplied discriminator byte. The message handler will
|
||||||
|
* be registered on the supplied side (this is the side where you want the message to be processed and acted upon).
|
||||||
|
*
|
||||||
|
* @param messageHandler the message handler instance
|
||||||
|
* @param requestMessageType the message type
|
||||||
|
* @param discriminator a discriminator byte
|
||||||
|
* @param side the side for the handler
|
||||||
|
*/
|
||||||
|
public <REQ extends IMessage, REPLY extends IMessage> void registerMessage(IMessageHandler<? super REQ, ? extends REPLY> messageHandler, Class<REQ> requestMessageType, int discriminator, Side side)
|
||||||
{
|
{
|
||||||
packetCodec.addDiscriminator(discriminator, requestMessageType);
|
packetCodec.addDiscriminator(discriminator, requestMessageType);
|
||||||
FMLEmbeddedChannel channel = channels.get(side);
|
FMLEmbeddedChannel channel = channels.get(side);
|
||||||
|
@ -112,19 +141,19 @@ public class SimpleNetworkWrapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <REQ extends IMessage, REPLY extends IMessage, NH extends INetHandler> void addServerHandlerAfter(FMLEmbeddedChannel channel, String type, Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Class<REQ> requestType)
|
private <REQ extends IMessage, REPLY extends IMessage, NH extends INetHandler> void addServerHandlerAfter(FMLEmbeddedChannel channel, String type, IMessageHandler<? super REQ, ? extends REPLY> messageHandler, Class<REQ> requestType)
|
||||||
{
|
{
|
||||||
SimpleChannelHandlerWrapper<REQ, REPLY> handler = getHandlerWrapper(messageHandler, Side.SERVER, requestType);
|
SimpleChannelHandlerWrapper<REQ, REPLY> handler = getHandlerWrapper(messageHandler, Side.SERVER, requestType);
|
||||||
channel.pipeline().addAfter(type, messageHandler.getName(), handler);
|
channel.pipeline().addAfter(type, messageHandler.getClass().getName(), handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <REQ extends IMessage, REPLY extends IMessage, NH extends INetHandler> void addClientHandlerAfter(FMLEmbeddedChannel channel, String type, Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Class<REQ> requestType)
|
private <REQ extends IMessage, REPLY extends IMessage, NH extends INetHandler> void addClientHandlerAfter(FMLEmbeddedChannel channel, String type, IMessageHandler<? super REQ, ? extends REPLY> messageHandler, Class<REQ> requestType)
|
||||||
{
|
{
|
||||||
SimpleChannelHandlerWrapper<REQ, REPLY> handler = getHandlerWrapper(messageHandler, Side.CLIENT, requestType);
|
SimpleChannelHandlerWrapper<REQ, REPLY> handler = getHandlerWrapper(messageHandler, Side.CLIENT, requestType);
|
||||||
channel.pipeline().addAfter(type, messageHandler.getName(), handler);
|
channel.pipeline().addAfter(type, messageHandler.getClass().getName(), handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <REPLY extends IMessage, REQ extends IMessage> SimpleChannelHandlerWrapper<REQ, REPLY> getHandlerWrapper(Class<? extends IMessageHandler<REQ, REPLY>> messageHandler, Side side, Class<REQ> requestType)
|
private <REPLY extends IMessage, REQ extends IMessage> SimpleChannelHandlerWrapper<REQ, REPLY> getHandlerWrapper(IMessageHandler<? super REQ, ? extends REPLY> messageHandler, Side side, Class<REQ> requestType)
|
||||||
{
|
{
|
||||||
return new SimpleChannelHandlerWrapper<REQ, REPLY>(messageHandler, side, requestType);
|
return new SimpleChannelHandlerWrapper<REQ, REPLY>(messageHandler, side, requestType);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue