コード例 #1
0
 public static void Write(Stream stream, Bcp.RetransmissionFinish packet)
 {
     try
     {
         stream.WriteByte(Bcp.RetransmissionFinish.HeadByte);
         WriteUnsignedVarint(stream, packet.ConnectionId);
         WriteUnsignedVarint(stream, packet.PackId);
     }
     catch
     {
         stream.Close();
     }
 }
コード例 #2
0
        private void CleanUp(uint connectionId, Connection connection)
        {
            Debug.WriteLine("Cleaning up connectionId: " + connectionId);
            RemoveOpenConnection(connection);
            if (!connection.isFinishSent)
            {
                var finishPacket = new Bcp.Finish();
                connection.unconfirmedPackets.Enqueue(finishPacket);
                connection.isFinishSent = true;
            }
            Close(connection);
            var stream = connection.stream;

            connection.stream = null;
            if (stream != null)
            {
                var heartBeatTimer = connection.heartBeatTimer;
                connection.heartBeatTimer = null;
                if (heartBeatTimer != null)
                {
                    heartBeatTimer.Change(Timeout.Infinite, Timeout.Infinite);
                    heartBeatTimer.Dispose();
                    heartBeatTimer = null;
                }
            }
            var packId = connection.numAcknowledgeReceivedForData;

            foreach (Bcp.IAcknowledgeRequired packet in connection.unconfirmedPackets)
            {
                if (packet is Bcp.Data)
                {
                    var oldPacket = (Bcp.Data)packet;
                    var newPacket = new Bcp.RetransmissionData(connectionId, packId, oldPacket.Buffers);
                    Enqueue(newPacket);
                    packId += 1;
                }
                else if (packet is Bcp.Finish)
                {
                    var newPacket = new Bcp.RetransmissionFinish(connectionId, packId);
                    Enqueue(newPacket);
                    packId += 1;
                }
                else
                {
                    Enqueue(packet);
                }
            }
            connection.unconfirmedPackets = new Queue <Bcp.IAcknowledgeRequired>();
            CheckConnectionFinish(connectionId, connection);
        }