public override void OnReceived(IConnection connection, NetworkBuffer buffer, int offset, int count) { NetworkBuffer msgBuffer = buffer; //NetworkBuffer msgBuffer = new NetworkBuffer(NetworkParameters._MAX_UNCOMPRESS_MESSAGE_SIZE, true); //msgBuffer.WriteBytes(buffer, offset, count); try { while (msgBuffer.Readable) { int oldReaderOffset = msgBuffer.ReadOffset; int msgCount = 0; bool result = Decode(msgBuffer, ref msgCount); if (result == false) { if (oldReaderOffset == msgBuffer.ReadOffset) { // Seems like more data is required. // Let us wait for the next notification. break; } else { // Previous data has been discarded. // Probably it is reading on. continue; } } else if (msgCount == 0) { throw new InvalidOperationException( "decode() method must read at least one byte " + "if it returned a frame "); } try { FireBuffReceived(connection, msgBuffer, msgBuffer.ReadOffset, msgCount); } finally { msgBuffer.DiscardReadBytes(); } } } catch (Exception e) { Logger.Debug(e.Message); Logger.Debug(e.StackTrace); } }
public void CallDecode(Connection connection) { while (networkBuffer.Readable) { int oldReaderOffset = networkBuffer.ReadOffset; //try to decode bool result = Decode(connection); if (result == false) { if (oldReaderOffset == networkBuffer.ReadOffset) { // wait to receive more data break; } else { // Previous data has been discarded. // Probably it is reading on. //never be here -- wind continue; } } else if (msgCount == 0) { throw new InvalidOperationException( "decode() method must read at least one byte " + "if it returned a frame "); } try { if (connection.netHandler != null) { connection.netHandler.OnReceived(connection, networkBuffer.ToArray(), msgInitOffset, msgCount); } else { connection.OnReceived(connection, networkBuffer.ToArray(), msgInitOffset, msgCount); } } finally { networkBuffer.ReadOffset = msgInitOffset + msgCount; networkBuffer.DiscardReadBytes(); } } }
public override void OnReceived(IConnection connection, byte[] buffer, int offset, int count) { if (msgBuffer == null) { msgBuffer = new NetworkBuffer(NetworkParameters.MaxCompressMessageSize, true); } msgBuffer.Write(buffer, offset, count); try { while (msgBuffer.Readable) { int readOffset = msgBuffer.ReadOffset; int num = 0; if (!Decode(msgBuffer, ref num)) { if (readOffset == msgBuffer.ReadOffset) { break; } } else { if (num == 0) { throw new InvalidOperationException("decode() method must read at least one byte if it returned a frame "); } try { FireBuffReceived(connection, msgBuffer.GetBuffer(), msgBuffer.ReadOffset, num); } finally { msgBuffer.ReadOffset = msgBuffer.ReadOffset + num; msgBuffer.DiscardReadBytes(); } } } } catch (Exception ex) { LoggerManager.Instance.Info("OnReceived connection {0} catch Exception {1}", connection.ToString(), ex.ToString()); } }