internal void StopListenerCore(WsListener wsListener)
 {
     RetryOnHCONNError(() =>
     {
         var pcfMsg = _messageAgent.NewRequest(MQC.MQCMD_STOP_CHANNEL_LISTENER);
         pcfMsg.AddParameter(MQC.MQCACH_LISTENER_NAME, wsListener.Name);
         var pcfResponses = _messageAgent.Send(pcfMsg);
     });
 }
        internal IListener OpenListener(string name, bool autoLoadInfo = false)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            try
            {
                var l = new WsListener(this, name);
                if (autoLoadInfo)
                {
                    l.RefreshInfo();
                }

                return(l);
            }
            catch (MQException ibmEx)
            {
                throw ibmEx.ToMqException(AddExtraInfoToError);
            }
        }
        internal void RefreshListenerInfosCore(WsListener wsListener)
        {
            wsListener.Ip       = null;
            wsListener.Port     = null;
            wsListener.Protocol = null;
            wsListener.Status   = null;

            RetryOnHCONNError(() =>
            {
                var pcfMsg = _messageAgent.NewRequest(MQC.MQCMD_INQUIRE_LISTENER);

                pcfMsg.AddParameter(MQC.MQCACH_LISTENER_NAME, wsListener.Name);

                var pcfResponses = _messageAgent.Send(pcfMsg);

                var protocol = pcfResponses[0].GetIntParameterValue(MQC.MQIACH_XMIT_PROTOCOL_TYPE);

                switch (protocol)
                {
                case MQC.MQXPT_TCP:
                    wsListener.Protocol = "TCP";
                    break;

                case MQC.MQXPT_LU62:
                    wsListener.Protocol = "LU62";
                    break;

                case MQC.MQXPT_NETBIOS:
                    wsListener.Protocol = "NETBIOS";
                    break;

                case MQC.MQXPT_SPX:
                    wsListener.Protocol = "SPX";
                    break;
                }

                if (protocol == MQC.MQXPT_TCP)
                {
                    var ip        = pcfResponses[0].GetStringParameterValue(MQC.MQCACH_IP_ADDRESS);
                    wsListener.Ip = ip;
                    var port      = pcfResponses[0].GetIntParameterValue(MQC.MQIACH_PORT);
                    if (port > 0)
                    {
                        wsListener.Port = port;
                    }
                }

                var pcfMsg2 = _messageAgent.NewRequest(MQC.MQCMD_INQUIRE_LISTENER_STATUS);
                pcfMsg2.AddParameter(MQC.MQCACH_LISTENER_NAME, wsListener.Name);
                PCF.PcfMessage[] statusMsg;
                if (_messageAgent.TrySend(pcfMsg2, out statusMsg))
                {
                    var status = statusMsg[0].GetIntParameterValue(MQC.MQIACH_LISTENER_STATUS);

                    switch (status)
                    {
                    case MQC.MQSVC_STATUS_STARTING:
                        wsListener.Status = ListenerStatus.Starting;
                        break;

                    case MQC.MQSVC_STATUS_RUNNING:
                        wsListener.Status = ListenerStatus.Running;
                        break;

                    case MQC.MQSVC_STATUS_STOPPING:
                        wsListener.Status = ListenerStatus.Stopping;
                        break;

                    case MQC.MQSVC_STATUS_STOPPED:
                        wsListener.Status = ListenerStatus.Stopped;
                        break;

                    case MQC.MQSVC_STATUS_RETRYING:
                        wsListener.Status = ListenerStatus.Retrying;
                        break;
                    }
                }
                else
                {
                    wsListener.Status = ListenerStatus.Stopped;
                }
            });
        }