package com.cari.voip.keyboard.soft.resources;
import java.io.Reader;
public class StreamParser implements IStreamParser {
private Reader reader = null;
private static boolean prevEndR = false;
private static boolean prevEndN = false;
private static int invalidLine = 0;
private String firstLine = null;
private char []cbuf = new char[1];
public char []bodyBuf = new char[128];
@Override
public synchronized char readChar() {
char c = (char)-1;
if(this.reader != null){
try {
int n = this.reader.read(cbuf);
if(n > 0){
c = cbuf[0];
}
else if(n == -1){
//reach end of stream;
}
else {
//error
}
} catch (Exception e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
return c;
}
@Override
public synchronized String readLine() {
int endLen = 0;
int lineLen = 0;
boolean newLine = false;
StringBuilder sb = new StringBuilder(64);
if(this.reader != null){
while(true){
char c = this.readChar();
if(c == '\n' || c == '\r'){
endLen++;
if(lineLen > 0 ||
endLen >=2){
newLine = true;
}
else{
if(c == '\n'){
newLine = prevEndR?false:true;
}
else{
newLine = prevEndN?false:true;
}
}
if(newLine == true){
if(c == '\n'){
prevEndN = true;
prevEndR = false;
}else{
prevEndN = false;
prevEndR = true;
}
break;
}
}
else if(c != (char)-1){
lineLen++;
sb.append(c);
}
else {
prevEndR = false;
prevEndN = false;
break;
}
}
}
if(lineLen == 0){
if(newLine == false){
return null;
}
return "";
}
return sb.toString();
}
@Override
public void setInput(Reader in) {
this.reader = in;
}
}