An event occurs when the channel request has failed. This could be due to Linxter Services Bus (ISB). See more details in ErrorMessage property.

Namespace:  Linxter.SDK
Assembly:  Linxter.SDK (in Linxter.SDK.dll) Version: 1.5.0.0 (1.5.0.0)

Syntax

C#
event Action<ChannelActionFailEventArgs> ChannelActionFailed
Visual Basic (Declaration)
Event ChannelActionFailed As Action(Of ChannelActionFailEventArgs)

Examples

CopyC#
private List<ProgramInstanceInfo> m_blockedPrograms = new List<ProgramInstanceInfo>();
private List<ProgramInstanceInfo> m_activeChannels = new List<ProgramInstanceInfo>();
private ILinxterCommunicationChannel m_channel;

public void SetUpChannelEvents(ILinxterCommunicationChannel channel)
{
    // hook communication channel events
    m_channel = channel;
    channel.BlockedInstancesChanged += new Action<Linxter.SDK.EventArgs.CommunicationChannelEventArgs>(OnBlockedInstancesChanged);
    channel.ChannelActionFailed += new Action<Linxter.SDK.EventArgs.ChannelActionFailEventArgs>(OnChannelActionFailed);
    channel.IncomingChannelRequestsChanged += new Action<Linxter.SDK.EventArgs.CommunicationChannelEventArgs>(OnIncomingChannelRequestsChanged);
    channel.OpenCommunicationChannelsChanged += new Action<Linxter.SDK.EventArgs.CommunicationChannelEventArgs>(OnOpenCommunicationChannelsChanged);
    channel.OutgoingChannelRequestsChanged += new Action<Linxter.SDK.EventArgs.CommunicationChannelEventArgs>(OnOutgoingChannelRequestsChanged);
}

void OnBlockedInstancesChanged(Linxter.SDK.EventArgs.CommunicationChannelEventArgs obj)
{
    // update my local list of blocked instances
    if (obj.Action.Equals(ChannelAction.Unblock))
    {
        if (m_blockedPrograms.Contains(obj.ProgramInstanceInfo))
        {
            m_blockedPrograms.Remove(obj.ProgramInstanceInfo);
        }
    }
    else if (obj.Action.Equals(ChannelAction.Block))
    {
        if (!m_blockedPrograms.Contains(obj.ProgramInstanceInfo))
        {
            m_blockedPrograms.Add(obj.ProgramInstanceInfo);
        }
    }
}

void OnChannelActionFailed(Linxter.SDK.EventArgs.ChannelActionFailEventArgs obj)
{
    string channelActionSource = string.Empty;
    switch (obj.ActionSource)
    {
        case Linxter.SDK.EventArgs.ChannelActionSource.Instance:
            channelActionSource = "Instance";
            break;
        case Linxter.SDK.EventArgs.ChannelActionSource.ISB:
            channelActionSource = "ISB";
            break;
        case Linxter.SDK.EventArgs.ChannelActionSource.WebManager:
            channelActionSource = "Web Manager";
            break;
    }
    // notify user when channel request fails
    MessageBox.Show(string.Format("Communication Channel Action {0} for ProgramInstanceId '{1}' failed. Error message: {2}", obj.Action, obj.TargetInstanceID, obj.ErrorMessage), "Channel Action Failure", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

void OnIncomingChannelRequestsChanged(Linxter.SDK.EventArgs.CommunicationChannelEventArgs obj)
{
    ChannelAction action = obj.Action;
    string status = string.Empty;
    switch (action)
    {
        case ChannelAction.Accept:
            // a recent request was accepted
            status = string.Format("Communication channel request for ProgramInstanceId '{0}' was accepted.", obj.ProgramInstanceInfo.ProgramInstanceId.ToString());
            break;
        case ChannelAction.Block:
            // this program was blocked
            status = string.Format("Program Instance '{0}' blocked all connections from this program instance.", obj.ProgramInstanceInfo.ProgramInstanceAlias);
            break;
        case ChannelAction.Decline:
            status = string.Format("Channel request to Program Instance '{0}' was declined.", obj.ProgramInstanceInfo.ProgramInstanceAlias);
            break;
        case ChannelAction.Request:
            // it's a new request
            status = string.Format("New incoming request from {0}.  Their message:\n{1}.");
            break;
    }

    MessageBox.Show(status, "Channel Request Status", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

void OnOpenCommunicationChannelsChanged(Linxter.SDK.EventArgs.CommunicationChannelEventArgs obj)
{
    // update listbox containing active channels
    ListBox openChannelsList = this.openChannelsListBox;
    openChannelsList.Items.Clear();

    foreach (ProgramInstanceInfo item in m_channel.OpenCommunicationChannels)
    {
        openChannelsList.Items.Add(item.ProgramInstanceAlias);
    }
}

void OnOutgoingChannelRequestsChanged(Linxter.SDK.EventArgs.CommunicationChannelEventArgs obj)
{
    // update listbox containing outbound requests
    ListBox outboundRequests = this.outgoingRequestsListBox;
    outboundRequests.Items.Clear();

    foreach (ChannelRequestInfo item in m_channel.OutgoingChannelRequests)
    {
        outboundRequests.Items.Add(item.Receiver.ProgramInstanceAlias);
    }
}
CopyVB.NET
Private m_blockedPrograms As New List(Of ProgramInstanceInfo)()
Private m_activeChannels As New List(Of ProgramInstanceInfo)()
Private m_channel As ILinxterCommunicationChannel

Public Sub SetUpChannelEvents(ByVal channel As ILinxterCommunicationChannel)
    ' hook communication channel events
    m_channel = channel
    AddHandler channel.BlockedInstancesChanged, AddressOf OnBlockedInstancesChanged
    AddHandler channel.ChannelActionFailed, AddressOf OnChannelActionFailed
    AddHandler channel.IncomingChannelRequestsChanged, AddressOf OnIncomingChannelRequestsChanged
    AddHandler channel.OpenCommunicationChannelsChanged, AddressOf OnOpenCommunicationChannelsChanged
    AddHandler channel.OutgoingChannelRequestsChanged, AddressOf OnOutgoingChannelRequestsChanged
End Sub

Private Sub OnBlockedInstancesChanged(ByVal obj As Linxter.SDK.EventArgs.CommunicationChannelEventArgs)
    ' update my local list of blocked instances
    If obj.Action.Equals(ChannelAction.Unblock) Then
        If m_blockedPrograms.Contains(obj.ProgramInstanceInfo) Then
            m_blockedPrograms.Remove(obj.ProgramInstanceInfo)
        End If
    ElseIf obj.Action.Equals(ChannelAction.Block) Then
        If Not m_blockedPrograms.Contains(obj.ProgramInstanceInfo) Then
            m_blockedPrograms.Add(obj.ProgramInstanceInfo)
        End If
    End If
End Sub

Private Sub OnChannelActionFailed(ByVal obj As Linxter.SDK.EventArgs.ChannelActionFailEventArgs)
    Dim channelActionSource As String = String.Empty
    Select Case obj.ActionSource
        Case Linxter.SDK.EventArgs.ChannelActionSource.Instance
            channelActionSource = "Instance"
        Case Linxter.SDK.EventArgs.ChannelActionSource.ISB
            channelActionSource = "ISB"
        Case Linxter.SDK.EventArgs.ChannelActionSource.WebManager
            channelActionSource = "Web Manager"
    End Select
    ' notify user when channel request fails
    MessageBox.Show(String.Format("Communication Channel Action {0} for ProgramInstanceId '{1}' failed. Error message: {2}", obj.Action, obj.TargetInstanceID, obj.ErrorMessage), "Channel Action Failure", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub

Private Sub OnIncomingChannelRequestsChanged(ByVal obj As Linxter.SDK.EventArgs.CommunicationChannelEventArgs)
    Dim action As ChannelAction = obj.Action
    Dim status As String = String.Empty
    Select Case action
        Case ChannelAction.Accept
            ' a recent request was accepted
            status = String.Format("Communication channel request for ProgramInstanceId '{0}' was accepted.", obj.ProgramInstanceInfo.ProgramInstanceId.ToString())
        Case ChannelAction.Block
            ' this program was blocked
            status = String.Format("Program Instance '{0}' blocked all connections from this program instance.", obj.ProgramInstanceInfo.ProgramInstanceAlias)
        Case ChannelAction.Decline
            status = String.Format("Channel request to Program Instance '{0}' was declined.", obj.ProgramInstanceInfo.ProgramInstanceAlias)
        Case ChannelAction.Request
            ' it's a new request
            status = String.Format("New incoming request from {0}.  Their message:" & vbLf & "{1}.")
    End Select

    MessageBox.Show(status, "Channel Request Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub

Private Sub OnOpenCommunicationChannelsChanged(ByVal obj As Linxter.SDK.EventArgs.CommunicationChannelEventArgs)
    ' update listbox containing active channels
    Dim openChannelsList As ListBox = Me.openChannelsListBox
    openChannelsList.Items.Clear()

    For Each item As ProgramInstanceInfo In m_channel.OpenCommunicationChannels
        openChannelsList.Items.Add(item.ProgramInstanceAlias)
    Next item
End Sub

Private Sub OnOutgoingChannelRequestsChanged(ByVal obj As Linxter.SDK.EventArgs.CommunicationChannelEventArgs)
    ' update listbox containing outbound requests
    Dim outboundRequests As ListBox = Me.outgoingRequestsListBox
    outboundRequests.Items.Clear()

    For Each item As ChannelRequestInfo In m_channel.OutgoingChannelRequests
        outboundRequests.Items.Add(item.Receiver.ProgramInstanceAlias)
    Next item
End Sub

See Also