1. #1
    U-Labs Plus-Mitglied

    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.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191