pull/197/head
Felipe Herranz 2018-12-27 21:01:44 +01:00
rodzic 491bf0c029
commit 4a8e09dbf4
1 zmienionych plików z 45 dodań i 14 usunięć

Wyświetl plik

@ -2,33 +2,40 @@ package com.felhr.utils;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ProtocolBuffer {
public static final String BINARY = "binary";
public static final String BINARY = "binary.";
public static final String TEXT = "text";
private final String baseRegex1 = "(?<=";
/**
* REGEX
* .+?(?<=\\r\\n)
*/
private final String baseRegex1 = ".+?(?<=";
private final String baseRegex2 = ")";
private String mode;
private String finalRegex;
private static final int DEFAULT_BUFFER_SIZE = 16 * 1024;
private String trailChars;
private String regex;
private byte[] rawBuffer;
private byte[] separator;
private StringBuilder stringBuffer;
private Iterator<String> iterator;
private List<String> commands = new ArrayList<>();
private Pattern wholeCommandPattern;
public ProtocolBuffer(String mode){
this.mode = mode;
this.iterator = commands.iterator();
if(mode.equals(BINARY)){
rawBuffer = new byte[DEFAULT_BUFFER_SIZE];
}else{
@ -37,6 +44,8 @@ public class ProtocolBuffer {
}
public ProtocolBuffer(String mode, int bufferSize){
this.mode = mode;
this.iterator = commands.iterator();
if(mode.equals(BINARY)){
rawBuffer = new byte[bufferSize];
}else{
@ -45,11 +54,15 @@ public class ProtocolBuffer {
}
public void setTrailChars(String trailChars){
finalRegex = baseRegex1 + adaptTrailChars(trailChars) + baseRegex2;
wholeCommandPattern = Pattern.compile(baseRegex1 + adaptTrailChars(trailChars) + baseRegex2);
}
public void setSeparator(byte[] separator){
this.separator = separator;
}
public void setRegex(String regex){
finalRegex = regex;
wholeCommandPattern = Pattern.compile(regex);
}
public void appendData(byte[] data){
@ -57,15 +70,33 @@ public class ProtocolBuffer {
try {
String dataStr = new String(data, "UTF-8");
stringBuffer.append(dataStr);
String[] splitStr = stringBuffer.toString().split(finalRegex);
if(splitStr.length > 1){
commands.addAll(Arrays.asList(splitStr));
stringBuffer.setLength(0);
Matcher matcher1 = wholeCommandPattern.matcher(stringBuffer.toString());
int groupCount = matcher1.groupCount();
for(int i=0;i<=groupCount-1;i++){
commands.add(matcher1.group(i));
}
stringBuffer.replace(0, stringBuffer.length(), matcher1.replaceAll(""));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}else if(mode.equals(BINARY)){
//TODO:!!
}
}
public boolean hasMoreCommands(){
return iterator.hasNext();
}
public String nextCommand(){
if(iterator.hasNext()){
return iterator.next();
}else{
return null;
}
}