private void ReadBody(byte[] bytes, int offset, int limit) { int length = pkgLength + HeadLength - bufferOffset; if ((offset + length) <= limit) { WriteBytes(bytes, offset, length, bufferOffset, buffer); offset += length; //Invoke the protocol api to handle the message this.messageProcesser.Invoke(buffer); this.bufferOffset = 0; this.pkgLength = 0; if (this.enTransportState != enTransportState.closed) { this.enTransportState = enTransportState.readHead; } if (offset < limit) { ProcessBytes(bytes, offset, limit); } } else { WriteBytes(bytes, offset, limit - offset, bufferOffset, buffer); bufferOffset += limit - offset; this.enTransportState = enTransportState.readBody; } }
private bool ReadHead(byte[] bytes, int offset, int limit) { int length = limit - offset; int headNum = HeadLength - bufferOffset; if (length >= headNum) { //Write head buffer WriteBytes(bytes, offset, headNum, bufferOffset, headBuffer); //Get package length pkgLength = (headBuffer[1] << 16) + (headBuffer[2] << 8) + headBuffer[3]; //Init message buffer buffer = new byte[HeadLength + pkgLength]; WriteBytes(headBuffer, 0, HeadLength, buffer); offset += headNum; bufferOffset = HeadLength; this.enTransportState = enTransportState.readBody; if (offset <= limit) { ProcessBytes(bytes, offset, limit); } return(true); } else { WriteBytes(bytes, offset, length, bufferOffset, headBuffer); bufferOffset += length; return(false); } }
internal void Close() { this.enTransportState = enTransportState.closed; }
public Transporter(Socket socket, Action <byte[]> processer) { this.socket = socket; this.messageProcesser = processer; enTransportState = enTransportState.readHead; }