Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.stewie.net.login;
- import org.jboss.netty.buffer.ChannelBuffer;
- import org.jboss.netty.channel.Channel;
- import org.jboss.netty.channel.ChannelHandlerContext;
- import org.jboss.netty.handler.codec.replay.ReplayingDecoder;
- import org.stewie.net.GameDecoder;
- import org.stewie.net.IoClient;
- import org.stewie.net.message.MessageBuilder;
- /**
- * @author Stewie
- *
- */
- public class RS2LoginDecoder extends ReplayingDecoder<LoginStage> {
- public RS2LoginDecoder(){
- checkpoint(LoginStage.READ);
- }
- @Override
- protected Object decode(ChannelHandlerContext ctx, Channel channel,
- ChannelBuffer buffer, LoginStage state) throws Exception {
- IoClient client = new IoClient(channel);
- switch(state){
- case READ:
- buffer.skipBytes(1);
- checkpoint(LoginStage.CONNECT);
- break;
- case CONNECT:
- int read = buffer.readByte();//should be 10
- System.out.println("read = "+read);
- int[] keys = new int[4];
- for(int key : keys){
- key = buffer.readInt();
- }
- int uid = buffer.readByte();
- String user = readRS2String(buffer);
- String pass = readRS2String(buffer);
- checkpoint(LoginStage.LOGIN);
- break;
- case LOGIN:
- boolean reconnecting = (buffer.readByte() == 18 ? true : false);
- buffer.readByte();
- buffer.readByte();
- buffer.readShort();
- buffer.readByte();
- buffer.skipBytes(36);
- ctx.getPipeline().replace("decoder", "decoder", new GameDecoder(client));
- channel.write(new MessageBuilder().writeByte(2).writeByte(0).writeByte(0).toMessage());
- break;
- }
- return null;
- }
- public static String readRS2String(ChannelBuffer buffer) {
- StringBuilder sb = new StringBuilder();
- byte b;
- while (buffer.readable() && (b = buffer.readByte()) != 0) {
- sb.append((char) b);
- }
- return sb.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement