Hello everyone
I am a developer from China, a few days ago, I found Nadron and learned the example.
so I want to simplify the Nadron lostdecade example for apply to other my games, but when I made another project, then run it,
data can't transfer from client to server, and GameServer.log has some exceptions:
2014-04-10 10:22:11,568 [GameRoomSession:339][TRACE]:Added Network handler to EventDispatcher of GameRoom org.mynamepfd.example.EchoGameRoom@4b5e33a7, for session: PlayerSession [id=DefaultSession2player=io.nadron.app.impl.DefaultPlayer@1f, parentGameRoom=org.mynamepfd.example.EchoGameRoom@4b5e33a7, protocol=null, isShuttingDown=false]
2014-04-10 10:22:11,584 [DefaultToServerHandler:48][ERROR]:Exception during network communication: {}.
io.netty.handler.codec.DecoderException: java.io.InvalidClassException: failed to read class descriptor
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99)
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173)
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101)
at java.lang.Thread.run(Unknown Source)
My EchoGameRoom.java 's code list below:
public class EchoGameRoom extends GameRoomSession
{
protected EchoGameRoom(GameRoomSessionBuilder gameRoomSessionBuilder)
{
super(gameRoomSessionBuilder);
addHandler(new RoomSessionHandler(this));
}
@Override
public void onLogin(final PlayerSession playerSession)
{
System.out.println("Recive connection from client......");
playerSession.addHandler(
new DefaultSessionEventHandler(playerSession)
{
@Override
protected void onDataIn(Event event)
{
System.out.println("Data flow from client to server......");
if(null != event.getSource())
{
event.setEventContext(new DefaultEventContext(playerSession, null));
playerSession.getGameRoom().send(event);
}
}
}
);
}
// ...
}
Console can't print Data flow from client to server......, Can you tell me why?Thanks.
--
You received this message because you are subscribed to the Google Groups "jetserver" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jetserver+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
// EchoGameRoom.java
public class EchoGameRoom extends GameRoomSession
{
public EchoGameRoom(GameRoomSessionBuilder gameRoomSessionBuilder)
{
super(gameRoomSessionBuilder);
addHandler(new EchoGameRoomSessionHandler(this));
}
@Override
public void onLogin(final PlayerSession playerSession)
{
System.out.println("1...");
playerSession.addHandler(
new DefaultSessionEventHandler(playerSession)
{
@Override
protected void onDataIn(Event event)
{
System.out.println("2...");
if(null != event.getSource())
{
event.setEventContext(new DefaultEventContext(playerSession, null));
playerSession.getGameRoom().send(event);
}
}
}
);
}
public static class EchoGameRoomSessionHandler extends SessionMessageHandler
{
public EchoGameRoomSessionHandler(GameRoomSession session)
{
super(session);
}
@Override
public void onEvent(Event event)
{
System.out.println("3......");
}
}
}
//LDClient.java
LoginBuilder builder = new LoginBuilder().username("user")
.password("pass").connectionKey("EchoGameRoom")
.nadronTcpHostName("localhost").tcpPort(18090);
//SpringConfig.java
@Configuration
@ImportResource("classpath:/beans.xml")
public class SpringConfig
{
@Autowired
@Qualifier("nettyObjectProtocol")
private Protocol nettyObjectProtocol;
public Game EchoGame()
{
return new SimpleGame(3, "EchoGame");
}
public GameRoom EchoGameRoom()
{
GameRoomSessionBuilder gameRoomSessionBuilder =
new GameRoomSessionBuilder();
gameRoomSessionBuilder
.parentGame(EchoGame())
.gameRoomName("EchoGameRoom")
.protocol(nettyObjectProtocol);
return new EchoGameRoom(gameRoomSessionBuilder);
}
@Bean(name = "lookupService")
public LookupService lookupService()
{
Map<String, GameRoom> Rooms = new HashMap<String, GameRoom>();
Rooms.put("EchoGameRoom", EchoGameRoom());
return new SimpleLookupService(Rooms);
}
}
When I run GameServer.java first, then run LDClient, server's console print
1...
2...
3...
It's right!!!
When console print 1..., client login server, print 2..., client send some datas to server,
print 3..., event was transfer for EchoGameSessionHandler
following above steps, server's console only print 1...,
GameServer.log contains below exceptions:
2014-04-10 11:18:56,801 [LoginHandler:63][DEBUG]:Login attempt from /127.0.0.1:3027
2014-04-10 11:18:56,817 [LoginHandler:200][TRACE]:Sending GAME_ROOM_JOIN_SUCCESS to channel [id: 0xaf72abe2, /127.0.0.1:3027 => /127.0.0.1:18090]
2014-04-10 11:18:56,817 [LoginHandler:242][TRACE]:Sending GAME_ROOM_JOIN_SUCCESS to channel [id: 0xaf72abe2, /127.0.0.1:3027 => /127.0.0.1:18090] completed
2014-04-10 11:18:56,817 [LoginHandler:245][TRACE]:Going to clear pipeline
2014-04-10 11:18:56,817 [GameRoomSession:180][TRACE]:Protocol to be applied is: io.nadron.protocols.impl.NettyObjectProtocol
2014-04-10 11:18:56,817 [NettyObjectProtocol:28][TRACE]:Going to apply NETTY_OBJECT_PROTOCOL on session: PlayerSession [id=DefaultSession2player=io.nadron.app.impl.DefaultPlayer@1f, parentGameRoom=org.mynamepfd.example.EchoGameRoom@4b5e33a7, protocol=null, isShuttingDown=false]
2014-04-10 11:18:56,817 [GameRoomSession:339][TRACE]:Added Network handler to EventDispatcher of GameRoom org.mynamepfd.example.EchoGameRoom@4b5e33a7, for session: PlayerSession [id=DefaultSession2player=io.nadron.app.impl.DefaultPlayer@1f, parentGameRoom=org.mynamepfd.example.EchoGameRoom@4b5e33a7, protocol=null, isShuttingDown=false]
2014-04-10 11:18:56,826 [DefaultToServerHandler:48][ERROR]:Exception during network communication: {}.
io.netty.handler.codec.DecoderException: java.io.InvalidClassException: failed to read class descriptor
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99)
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173)
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.InvalidClassException: failed to read class descriptor
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at io.netty.handler.codec.serialization.ObjectDecoder.decode(ObjectDecoder.java:73)
at io.nadron.handlers.netty.EventObjectDecoder$SourceDecoder.decode(EventObjectDecoder.java:44)
at io.nadron.handlers.netty.EventObjectDecoder.decode(EventObjectDecoder.java:28)
at io.nadron.handlers.netty.EventObjectDecoder.decode(EventObjectDecoder.java:13)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
... 12 more
Caused by: java.lang.ClassNotFoundException: io.nadron.example.lostdecade.LDGameState
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at io.netty.handler.codec.serialization.ClassLoaderClassResolver.resolve(ClassLoaderClassResolver.java:31)
at io.netty.handler.codec.serialization.CompactObjectInputStream.readClassDescriptor(CompactObjectInputStream.java:55)
... 22 more
Because my project can run, so I think my configure are right, but why server's console can't parse client's data?
Thanks.
在 2014年4月10日星期四UTC+8上午11时02分59秒,Abraham Menacherry写道: