void AsyncPwmChannelControl_ChannelNumberChanged(object sender, EventArgs e) { if (channelNumberLabel != null) { channelNumberLabel.Text = ChannelNumber.ToString(); } }
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; } }
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; } } } }