コード例 #1
0
 private void activateAllChannels()
 {
     for (int i = 0; i < channels.size(); i++)
     {
         ChabuChannelImpl ch = channels.get(i);
         ch.activate(this, i);
     }
 }
コード例 #2
0
        private void HandleSeqCompletion()
        {
            seqChannel.seqPacketCompleted();
            if (seqChannel.XmitRemaining > 0 && seqChannel.getXmitRemainingByRemote() > 0)
            {
                xmitChannelRequestData.request(seqChannel.Priority, seqChannel.ChannelId);
                callXmitRequestListener();
            }

            seqPacketPayload = null;
            seqChannel       = null;
            packetType       = PacketType.NONE;
        }
コード例 #3
0
        protected override void processRecvArm()
        {
            Utils.ensure(setup.isRemoteAcceptReceived(), ChabuErrorCode.ASSERT, "");

            if (packetSize != 16)
            {
                throw new ChabuException(string.Format("Packet type ARM with unexpected len field: {0}", packetSize));
            }

            int channelId = recvBuf.getInt();
            int arm       = recvBuf.getInt();

            ChabuChannelImpl channel = channels.get(channelId);

            channel.handleRecvArm(arm);
        }
コード例 #4
0
        protected override void processSeq(ByteChannel channel)
        {
            // is SEQ packet
            recvBuf.position(HEADER_RECV_SZ);
            int channelId = recvBuf.getInt(8);
            int seq       = recvBuf.getInt(12);
            int pls       = recvBuf.getInt(16);
            int padding   = packetSize - HEADER_RECV_SZ - pls;
            ChabuChannelImpl chabuChannel = channels.get(channelId);

            if (seqPacketIndex == 0)
            {
                // first processing
                Utils.ensure(padding >= 0 && padding < 4, ChabuErrorCode.ASSERT, "padding inplausible packetSize:{0} pls:{1}", packetSize, pls);
                chabuChannel.verifySeq(seq);
            }

            if (seqPacketIndex < pls)
            {
                int toBeHandledLimit = pls - seqPacketIndex;
                int handledBytes     = chabuChannel.handleRecvSeq(channel, toBeHandledLimit);
                seqPacketIndex += handledBytes;
            }

            if (seqPacketIndex >= pls && seqPacketIndex + ChabuImpl.SEQ_MIN_SZ < packetSize)
            {
                int paddingRemaining = packetSize - seqPacketIndex - ChabuImpl.SEQ_MIN_SZ;
                recvBufPadding.clear();
                Utils.ensure(paddingRemaining <= 3 && paddingRemaining > 0, ChabuErrorCode.ASSERT, "paddingRemaining inplausible {0} ({1}, {2})", paddingRemaining, seqPacketIndex, packetSize);
                recvBufPadding.limit(paddingRemaining);
                seqPacketIndex += channel.read(recvBufPadding);
            }

            if (seqPacketIndex + ChabuImpl.SEQ_MIN_SZ >= packetSize)
            {
                seqPacketIndex = 0;
                recvBuf.clear();
                recvBuf.limit(HEADER_RECV_SZ);
                packetType = PacketType.NONE;
            }
            else
            {
                Utils.ensure(recvBuf.position() == 20, ChabuErrorCode.ASSERT, "");
                Utils.ensure(recvBuf.limit() == 20, ChabuErrorCode.ASSERT, "");
            }
        }
コード例 #5
0
        private LoopCtrl xmitAction_EvalChannelData()
        {
            ChabuChannelImpl ch = PopNextPriorizedChannelRequest(xmitChannelRequestData);

            if (ch != null)
            {
                seqPacketPayload = ch.handleXmitData(this, xmitBuf, RemoteRecvPacketSize - ChabuImpl.SEQ_MIN_SZ);
                if (seqPacketPayload == null)
                {
                    return(LoopCtrl.None);
                }
                seqChannel = ch;
                int paddingCount = (4 - (seqPacketPayload.remaining() & 3)) % 4;
                seqPadding.clear().limit(paddingCount);

                Utils.ensure(xmitBuf.getInt(0) == xmitBuf.remaining() + seqPacketPayload.remaining() + seqPadding.remaining(),
                             ChabuErrorCode.ASSERT, "{0} = {1} + {2} + {3}", xmitBuf.getInt(0), xmitBuf.remaining(), seqPacketPayload.remaining(), seqPadding.remaining());
            }
            return(xmitBuf.hasRemaining() ? LoopCtrl.Continue : LoopCtrl.None);
        }
コード例 #6
0
ファイル: Extensions.cs プロジェクト: 00mjk/Chabu
 public static void add(this List <ChabuChannelImpl> list, ChabuChannelImpl c)
 {
     list.Add(c);
 }