package org.reunionemu.jreunion.server.parser;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.reunionemu.jreunion.server.Client;
public class Parser {
private HashMap<Pattern, PacketHandler> handlers = new HashMap<Pattern, PacketHandler>();
public Parser() {
}
public HashMap<Pattern, PacketHandler> getHandlers(){
return handlers;
}
public void register(PacketHandler handler){
synchronized(handlers){
unregister(handler);
for(Pattern pattern: handler.getPatterns()){
handlers.put(pattern, handler);
}
}
}
public void unregister(PacketHandler handler){
synchronized(handlers){
while (handlers.values().remove(handler));
}
}
public void parse(Client client, String line) {
synchronized(handlers){
for(Entry<Pattern, PacketHandler> entry : handlers.entrySet()){
Pattern pattern = entry.getKey();
Matcher matcher = pattern.matcher(line);
if(matcher.matches()){
PacketHandler handler = entry.getValue();
handler.handle(client, matcher);
}
}
}
}
}