public void Packet4() { SessionPacket ph = m; FlexBuffer buf = new FlexBuffer(new byte[] { (byte)VERSION, unchecked ((byte)BYTE), 2, 0, unchecked ((byte)NONE) }); mh.handled = false; ph.SessionPacket(who, buf); Assert.AreEqual(What.OOB_NOTIFY_HANDLER, mh.what); Assert.AreEqual(ps, m.GetTransport()); Assert.AreEqual(who, mh.xsender); Assert.IsNotNull(mh.xmsg); Assert.AreEqual(MyValueFactory.mt_add_result, mh.xmsg.GetXType); Assert.AreEqual(0, mh.xmsg.Count); }
public void Packet1() { // PacketHandler ph = m; SessionPacket ph = m; FlexBuffer buf = new FlexBuffer(new byte[] { (byte)VERSION, unchecked ((byte)BYTE), 1, 0, unchecked ((byte)NONE) }); mh.handled = true; // ph.Packet( who, buf ); ph.SessionPacket(who, buf); Assert.AreEqual(What.TESTMESSAGEHANDLERMESSAGE, mh.what); Assert.AreEqual(ps, m.GetTransport()); Assert.AreEqual(who, mh.xsender); Assert.IsNotNull(mh.xmsg); Assert.AreEqual(MyValueFactory.mt_add, mh.xmsg.GetXType); Assert.AreEqual(0, mh.xmsg.Count); }
public void SessionData(Who sender, FlexBuffer buf) { while (buf.Avail() > 0) { if (wantHeader) { // do we have enough to make a header if ((savedBuf.Length() + buf.Avail()) >= HEADER_SIZE) { int pktSize; if (savedBuf.Length() == 0) { // savedBuf is empty, entire header in buf. pktSize = ProcessHeader(buf, false); } else // header split across savedBuf and buf { // move just enough data from buf to savedBuf to have a header. int needFromBuf = HEADER_SIZE - savedBuf.Length(); savedBuf.Put(buf, needFromBuf); savedBuf.SetIndex(0); pktSize = ProcessHeader(savedBuf, true); } if (pktSize == 0) { continue; } bodyLen = pktSize; wantHeader = false; } else // want header but not enough space to make it { // save buf in savedBuf. savedBuf.SetIndex(savedBuf.Length()); savedBuf.Put(buf); } } else if ((savedBuf.Length() + buf.Avail()) >= bodyLen) { // want body, and there's enough to make it. // three possible cases: the body is entirely in savedBuf, // the body is split, or the body is entirely in buf. assert // that the body cannot entirely be in savedBuf, or else // we'd have processed it last time. Debug.Assert(savedBuf.Length() < bodyLen); if (savedBuf.Length() == 0) { // savedBuf is empty, entire body in buf. int length = buf.Length(); int index = buf.Index(); buf.SetLength(index + bodyLen); // handler.Packet(sender, buf); session.SessionPacket(sender, buf); buf.SetLength(length); buf.SetIndex(index + bodyLen); wantHeader = true; } else // body split across savedBuf and buf { // move just enough data from buf to savedBuf to have a body. int needFromBuf = bodyLen - savedBuf.Length(); savedBuf.Put(buf, needFromBuf); savedBuf.SetIndex(0); // handler.Packet(sender, savedBuf); session.SessionPacket(sender, savedBuf); savedBuf.Reset(); wantHeader = true; } } else // want body, but there's not enough to make it. { // save buf in savedBuf. savedBuf.Put(buf); } } // buf is now empty, and there's nothing else to do. Debug.Assert(buf.Avail() == 0); }