Example #1
0
        public void HandleMessage(CtiServiceSwitch @switch, Message message)
        {
            var createInteractionMessage = message as CreateInteractionMessage;

            if (createInteractionMessage != null)
            {
                @switch.QueueInteraction(createInteractionMessage.Interaction);
            }
        }
Example #2
0
        public void HandleMessage(CtiServiceSwitch @switch, Message message)
        {
            var interactionTransferMessage = message as InteractionTransferMessage;

            if (interactionTransferMessage != null)
            {
                var interaction = @switch.Interactions.FirstOrDefault(i => i.Id == interactionTransferMessage.InteractionId);

                var transferInteraction = new SwitchInteraction {
                    Id              = Guid.NewGuid(),
                    State           = SwitchInteractionState.Queued,
                    SourceAddress   = interaction.SourceAddress,
                    ReferenceId     = interaction.ReferenceId,
                    Queue           = interaction.Queue,
                    Properties      = interaction.Properties,
                    Type            = interaction.Type,
                    ConferencedCall = interaction.ConferencedCall
                };

                var originalTransfers = transferInteraction.Properties.Where(p => p.Key.StartsWith("OriginalInteraction-")).Count();
                transferInteraction.Properties.Add(string.Format("OriginalInteraction-{0}", originalTransfers), interaction.Id.ToString());

                if (interactionTransferMessage.TargetAddress == "queue")
                {
                    @switch.QueueInteraction(transferInteraction);
                }
                else
                {
                    var device = @switch.Devices.FirstOrDefault(d => d.Address == interactionTransferMessage.TargetAddress);

                    if (device != null)
                    {
                        @switch.Interactions.Add(transferInteraction);
                        @switch.AssignInteraction(device, transferInteraction);
                    }
                }

                notifyInteractionState(@switch, interaction, SwitchInteractionState.Disconnected);

                interaction.Agent.State = SwitchAgentState.WrapUp;
                notifyAcw(interaction, @switch);
            }

            var deviceInfoMessage = message as GetDeviceInfoMessage;

            if (deviceInfoMessage != null)
            {
                var device       = @switch.Devices.FirstOrDefault(d => d.Id == deviceInfoMessage.DeviceId);
                var targetDevice = @switch.Devices.FirstOrDefault(d => d.Id == deviceInfoMessage.TargetDeviceId);
                var response     = new DeviceInfoMessage {
                    TargetDevice = targetDevice
                };

                @switch.SendMessage(device, response);
            }
        }