private void Decode() { while (true) { if (ibuffer.Size < 8) { break; } int type = ibuffer.pop_int(); int size = ibuffer.pop_int(); if (size > ibuffer.Capacity - 8) { throw new Exception("message size error: " + size); } if (size <= ibuffer.Size) { Message msg = manager.CreateMessage(type); if (msg == null) { manager.onUnknownMessage(this, type, size, ibuffer); continue; } msg.unmarshal(ibuffer); msg.setSession(this); try { msg.dispatch(); } catch { } } else { ibuffer.pop_rollback(8); break; } } }