Exemple #1
0
        public bool Close()
        {
            // Subroutine to close the channel and put TNC into known state...
            // Always call this method before the instance goes out of scope
            if (blnClosed)
            {
                return(true);
            }
            try
            {
                if (Globals.blnManualAbort == true)
                {
                    enmState = LinkStates.Disconnected;
                }

                blnClosed = true;
                Globals.queChannelDisplay.Enqueue("G*** Closing Packet Channel " + Globals.stcSelectedChannel.ChannelName + " at " + Globals.TimestampEx());
                if (Globals.objRadioControl != null) // Shut down the radio control and free the serial port
                {
                    Globals.objRadioControl.Close();
                    Thread.Sleep(Globals.intComCloseTime);
                    Globals.objRadioControl = null;
                }

                if (objProtocol is object)
                {
                    objProtocol.CloseProtocol();
                }
                var dttTimeout = DateTime.Now;
                dttTimeout = DateTime.Now;
                while (!(enmState == LinkStates.Disconnected | enmState == LinkStates.LinkFailed))
                {
                    if (dttTimeout.AddSeconds(10) < DateTime.Now)
                    {
                        break;
                    }
                }

                if (objCon != null)
                {
                    objCon.Close();
                }

                if (objKissDLProvider != null)
                {
                    objKissDLProvider.RemoveConnection(objCon);
                    objKissDLProvider.Close();
                }

                if (blnExitKiss & objKissChannel != null)
                {
                    objKissChannel.SetKissModeOff();
                    Thread.Sleep(200);
                }

                if (objKissChannel != null)
                {
                    objKissChannel.Close();
                }
                if (objKissComPort != null)
                {
                    objKissComPort.Close();
                }
                Globals.queStatusDisplay.Enqueue("Idle");
                Globals.queRateDisplay.Enqueue("------");
                Globals.blnChannelActive = false;
                Globals.ObjSelectedModem = null;
                return(true);
            }
            catch (Exception ex)
            {
                Log.Error("[ModemNativeKiss.Close]: " + ex.ToString());
            }

            return(default);