internal void Start(int portNumber) { Port = portNumber; if (_listeningThread != null && _listeningThread.ThreadState == ThreadState.Running) { throw new Exception("Logger already running"); } try { if (InitialParametersClass.NumberOfExternalEthernetInterfaces > 0) { Logger.Log("Control system has external ethernet interfaces, will attempt to map port to internal IP"); var id = CrestronEthernetHelper.GetAdapterdIdForSpecifiedAdapterType(EthernetAdapterType.EthernetCSAdapter); var controlSubnetIp = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, id); Logger.Log($"CS IP Address is: {controlSubnetIp}"); var result = CrestronEthernetHelper.AddPortForwarding((ushort)portNumber, (ushort)portNumber, controlSubnetIp, CrestronEthernetHelper.ePortMapTransport.TCP); if (result == CrestronEthernetHelper.PortForwardingUserPatRetCodes.NoErr) { _csPortForwardIp = controlSubnetIp; Logger.Log( $"Port Fowarding result = {result}, forwarded TCP port {portNumber} to internal IP: {controlSubnetIp}"); } else { Logger.Warn($"Could not create port forwarding for Logger, result = {result}"); } } } catch (Exception e) { Logger.Error(e); } _listeningThread = new Thread(ListenProcess) { Name = "LoggerRx" + InitialParametersClass.ApplicationNumber }; _listeningThread.Start(); Logger.Highlight($"Logger started console on port {portNumber}"); }