예제 #1
0
 void AsyncPwmChannelControl_ChannelNumberChanged(object sender, EventArgs e)
 {
     if (channelNumberLabel != null)
     {
         channelNumberLabel.Text = ChannelNumber.ToString();
     }
 }
예제 #2
0
        internal void SendTransfer(Delivery delivery)
        {
            delivery.DeliveryId = nextOutgoingId++;

            var transfer = new Transfer()
            {
                Handle        = delivery.Link.LocalHandle,
                DeliveryId    = delivery.DeliveryId,
                DeliveryTag   = delivery.DeliveryTag,
                MessageFormat = 0,
                Settled       = delivery.Settled,
                More          = false,
            };

            if (!delivery.Settled)
            {
                outgoingUnsettledMap.Add(delivery);
            }

            while (delivery.PayloadBuffer.LengthAvailableToRead > 0)
            {
                var buffer            = new ByteBuffer((int)Connection.MaxFrameSize, false);
                var bufferStartOffset = buffer.WriteOffset;
                transfer.More = false;

                AmqpCodec.EncodeFrame(buffer, transfer, ChannelNumber); // encode to get space available for payload
                int frameSize = buffer.LengthAvailableToRead;
                int payloadBufferSpaceAvailable = (int)Connection.MaxFrameSize - frameSize;

                int payloadSize = delivery.PayloadBuffer.LengthAvailableToRead;

                // payload is too big, need to split into multiple transfers
                if (payloadSize > payloadBufferSpaceAvailable)
                {
                    transfer.More = true;
                    // payloadBufferSpaceAvailable should not change after encoding again
                    buffer.ResetReadWrite();
                    AmqpCodec.EncodeFrame(buffer, transfer, ChannelNumber); // re-encode with correct value. TODO: is there a way to estimate instead of encoding, testing, and reencoding?
                    frameSize   = buffer.LengthAvailableToRead;
                    payloadSize = payloadBufferSpaceAvailable;              // max size
                }

                // copy payload to buffer to write
                AmqpBitConverter.WriteBytes(buffer, delivery.PayloadBuffer.Buffer, delivery.PayloadBuffer.ReadOffset, payloadSize);
                delivery.PayloadBuffer.CompleteRead(payloadSize);

                // rewrite frame size
                AmqpBitConverter.WriteInt(buffer.Buffer, bufferStartOffset, frameSize + payloadSize);

                if (Trace.IsDebugEnabled)
                {
                    trace.Debug("SEND CH({0}) {1} Payload {2} Bytes", ChannelNumber.ToString(), transfer.ToString(), payloadSize.ToString());
                }
                Connection.SendBuffer(buffer);

                // following fields may be null on subsequent transfers
                transfer.DeliveryId    = null;
                transfer.DeliveryTag   = null;
                transfer.MessageFormat = null;
                transfer.Settled       = null;
            }
        }
예제 #3
0
        private void SyncButton_Click(object sender, EventArgs e)
        {
            foreach (Channel ch in selected_wmi_lineup.GetChannels())
            {
                ChannelNumber channel_number = ch.ChannelNumber;
                Channel       merged_channel = selected_merged_lineup.GetChannelFromNumber(channel_number.Number, channel_number.SubNumber);
                if (merged_channel == null)
                { // missing channel
                    switch ((MissingChannelOptions)MissingChannelOptionsComboBox.SelectedIndex)
                    {
                    case MissingChannelOptions.AddMissingChannels:
                        AppendDebugLine("Adding channel " + channel_number.ToString() + " callsign: " + ch.CallSign);
                        Channel user_channel = ChannelEditing.AddUserChannelToLineupWithoutMerge(
                            selected_scanned_lineup, ch.CallSign, channel_number.Number, channel_number.SubNumber,
                            ModulationType.BDA_MOD_NOT_SET, ch.Service, selected_scanned_lineup.ScanDevices, ChannelType.CalculatedScanned);
                        user_channel.Update();
                        MergedChannel new_merged_channel = ChannelEditing.CreateMergedChannelFromChannels(
                            new List <Channel>(new Channel[] { user_channel }),
                            channel_number.Number, channel_number.SubNumber, ChannelType.AutoMapped);
                        new_merged_channel.Update();
                        break;

                    case MissingChannelOptions.SkipMissingChannels:
                        break;
                    }
                }
                else
                { // existing channel
                    switch ((ExistingChannelOptions)ExistingChannelOptionsComboBox.SelectedIndex)
                    {
                    case ExistingChannelOptions.ReplaceListing:
                        if (merged_channel.Service.IsSameAs(ch.Service))
                        {
                            AppendDebugLine("Channel " + channel_number.ToString() + " already good!");
                            break;
                        }
                        AppendDebugLine("Replacing listing on channel " + channel_number.ToString() +
                                        " old callsign: " + merged_channel.CallSign + " new callsign: " + ch.CallSign);
                        merged_channel.Service = ch.Service;
                        merged_channel.Update();
                        break;

                    case ExistingChannelOptions.SkipExistingChannels:
                        break;
                    }
                }
            }

            foreach (Channel ch in selected_merged_lineup.GetChannels().ToArray())
            {
                ChannelNumber channel_number = ch.ChannelNumber;
                Channel       wmi_channel    = selected_wmi_lineup.GetChannelFromNumber(channel_number.Number, channel_number.SubNumber);
                if (channel_number == null)
                { // extra channel
                    switch ((ExtraChannelOptions)ExtraChannelOptionsComboBox.SelectedIndex)
                    {
                    case ExtraChannelOptions.KeepExtraChannels:
                        break;

                    case ExtraChannelOptions.RemoveExtraChannels:
                        AppendDebugLine("Removing Extra channel " + channel_number.ToString() + " callsign: " + ch.CallSign);
                        ChannelEditing.DeleteChannel(ch);
                        break;
                    }
                }
            }
        }