1. #1

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard [Java] Module Protocol

    Hab ich eigentlich für den KREmu/Banana-Chat geschrieben. Als Sky mich gestern danach gefragt hat fiel mir aber auf, dass man es auch gut in Kombination mit Libraries verwenden kann.

    Diese Klassen sind für das Module Protocol, um bspw. eine Toolbar anzuzeigen. Stammen aus dem K-Reverse Emulator, müssen für den Banana-Chat etwas angepasst werden.

    ModuleTree.java
    Wo der Tree definiert ist, ist euch überlassen, bei mir wird er aus der Datenbank gelesen und dem Konstruktor übergeben.
    Code:
    package kreverse.kremu;
    
    import java.util.ArrayList;
    
    /**
     *
     * @author Flav
     */
    public class ModuleTree {
    	private String tree;
    	private int version;
    	private byte startIndex;
    	private ArrayList<String> modules;
    
    	public ModuleTree(String tree) {
    		this.tree = tree;
    		String[] mdls = tree.split(";");
    		version = Integer.parseInt(mdls[0]);
    		startIndex = Byte.parseByte(mdls[1]);
    		modules = new ArrayList<String>();
    
    		for (int i = 2; i < mdls.length; i++) {
    			modules.add(mdls[i]);
    		}
    	}
    
    	public String getTree() {
    		return tree;
    	}
    
    	public int getVersion() {
    		return version;
    	}
    
    	public String getModule(int index) {
    		return modules.get(index - startIndex);
    	}
    
    	public int getIndex(String module) {
    		for (int i = 0; i < modules.size(); i++) {
    			if (modules.get(i).equals(module)) {
    				return i + startIndex;
    			}
    		}
    
    		return -1;
    	}
    }
    ModuleHandler.java
    Dieser Handler (Opcode: q) wird auch von der Whois2 angesprochen, ist hier aber erstmal nur dafür zuständig, dass der Tree von Client und Server übereinstimmen (braucht man nur wenn man den Tree ständig aktualisiert, was meiner Meinung nach sinnlos ist).
    Code:
    package kreverse.kremu.handler;
    
    import kreverse.kremu.Client;
    import kreverse.kremu.Server;
    import kreverse.kremu.tools.packet.PacketCreator;
    import kreverse.kremu.tools.packet.PacketReader;
    
    /**
     *
     * @author Flav
     */
    public class ModuleHandler {
    	private static String protocolConfirmed;
    	private static String changeProtocol;
    
    	static {
    		protocolConfirmed = PacketCreator.protocolConfirmed();
    		changeProtocol = PacketCreator.changeProtocol();
    	}
    
    	public static void handle(PacketReader reader, Client client) {
    		String module = Server.get().getModuleTree().getModule(reader.readShort());
    
    		if (module.equals("CONFIRM_PROTOCOL_HASH")) {
    			reader.readInt();
    			int version = reader.readInt();
    
    			if (Server.get().getModuleTree().getVersion() == version) {
    				client.send(protocolConfirmed);
    			} else {
    				client.send(changeProtocol);
    			}
    		}
    	}
    }
    PacketReader.java
    Code:
    package kreverse.kremu.tools.packet;
    
    /**
     *
     * @author Flav
     */
    public class PacketReader {
    	private String buffer;
    
    	public PacketReader(String buffer) {
    		this.buffer = buffer;
    	}
    
    	public byte read() {
    		byte v = (byte) buffer.charAt(0);
    		buffer = buffer.substring(1);
    		return v;
    	}
    
    	public boolean readBoolean() {
    		return read() != 0;
    	}
    
    	public short readShort() {
    		return (short) (((read() & 0xFF) << 8)
    				+ (read() & 0xFF));
    	}
    
    	public int readInt() {
    		return ((read() & 0xFF) << 24)
    				+ ((read() & 0xFF) << 16)
    				+ ((read() & 0xFF) << 8)
    				+ (read() & 0xFF);
    	}
    
    	public String readString(int len) {
    		String v = buffer.substring(0, len);
    		buffer = buffer.substring(len);
    		return v;
    	}
    }
    PacketWriter.java
    Code:
    package kreverse.kremu.tools.packet;
    
    /**
     *
     * @author Flav
     */
    public class PacketWriter {
    	private StringBuilder buffer;
    
    	public PacketWriter() {
    		buffer = new StringBuilder();
    	}
    
    	public void write(int v) {
    		buffer.append((char) v);
    	}
    
    	public void writeBoolean(boolean v) {
    		write(v ? 1 : 0);
    	}
    
    	public void writeShort(int v) {
    		write(v >> 8);
    		write(v);
    	}
    
    	public void writeInt(int v) {
    		write(v >> 24);
    		write(v >> 16);
    		write(v >> 8);
    		write(v);
    	}
    
    	public void writeString(String v) {
    		buffer.append(v);
    	}
    
    	public String toString() {
    		return buffer.toString();
    	}
    }
    PacketCreator.java
    Code:
    [...]
    
    	public static String protocolConfirmed() {
    		PacketWriter packet = new PacketWriter();
    		packet.writeString(SendOpcode.MODULE.getValue());
    		packet.write(0x00);
    		packet.writeShort(Server.get().getModuleTree().getIndex("PROTOCOL_CONFIRMED"));
    		return packet.toString();
    	}
    
    	public static String changeProtocol() {
    		PacketWriter packet = new PacketWriter();
    		packet.writeString(SendOpcode.MODULE.getValue());
    		packet.write(0x00);
    		packet.writeShort(Server.get().getModuleTree().getIndex("CHANGE_PROTOCOL"));
    		packet.writeShort(Server.get().getModuleTree().getTree().length());
    		packet.writeString(Server.get().getModuleTree().getTree());
    		return packet.toString();
    	}
    
    [...]
    SessionHandler.java
    Code:
    [...]
    
    else if (opcode.equals(ReceiveOpcode.MODULE.getValue())) {
    							packet = packet.substring(2);
    							PacketReader reader = new PacketReader(packet);
    							ModuleHandler.handle(reader, this);
    						}
    
    [...]
    Hab jetzt einfach mal mein Post auf Banana-Coding zitiert, wer es in Kombination mit einer Library oder für seine eigenen Networks nutzen möchte, der muss das ganze natürlich etwas umstrukturieren. Wer das hier versteht sollte damit aber keine großen Probleme haben.

  2. The Following 2 Users Say Thank You to Flav For This Useful Post:

    lilpole (09.04.2012), Snees (09.04.2012)

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 02.12.2013, 23:41
  2. Prozess Module laden mit JNA
    Von DANP im Forum Java
    Antworten: 6
    Letzter Beitrag: 25.11.2013, 15:20
  3. VB.Net Anzahl geladener Module eines Prozesses auslesen
    Von Snooki im Forum .Net
    Antworten: 2
    Letzter Beitrag: 20.11.2013, 13:58
  4. Module Tree Viewer Tool - Wer war des? oÔ
    Von Bubble Gum im Forum Ressourcen
    Antworten: 8
    Letzter Beitrag: 20.05.2013, 15:41
  5. :-Token (Module) parsen/schreiben
    Von Brainy im Forum Sourcecode
    Antworten: 3
    Letzter Beitrag: 11.07.2012, 20:01
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.