public void Start() { if (state != LinkStates.ready) { return; } try { if (!Listening) { tcp.Start(); } state = LinkStates.listening; clock.Start(); Listening = true; debugInstances.Add(this); } catch (Exception ex) { if (state == LinkStates.listening) { tcp.Stop(); } state = LinkStates.ready; clock.Stop(); Listening = false; } listening?.Invoke(Listening); }
} // Abort public ModemTelnet(ref TChannelProperties strNewChannel) { stcChannel = strNewChannel; Globals.blnChannelActive = true; enmState = LinkStates.Initialized; Globals.queRateDisplay.Enqueue("Internet"); } // New
public Server(ushort port, SGuid?customID = null) { tcp = new TcpListener(IPAddress.Any, port); this.port = port; state = LinkStates.ready; ID = customID ?? SGuid.NewSGuid(); _clients = new List <Link>(); clock = new Clock(serverTick, tick); }
public Link(TcpClient c, SGuid id = default(SGuid)) { client = c; clock = new Clock(linkTick, read); pingPong = new PingPong(this, timeout); sending = false; buffer = ""; sendQueue = new Queue <Data>(); ID = id; state = LinkStates.creating; }
void FallCheck() { if (Mathf.Abs(lastPosition.y - transform.position.y) >= 0.01f && lastPosition.y > transform.position.y) { state = LinkStates.Falling; } else { if (state == LinkStates.Falling) state = LinkStates.Idle; } lastPosition = transform.position; }
public void Stop() { state = LinkStates.disconnecting; broadcast(true, EnumString(InternalCommands.disconnect), EnumString(LeaveReason.serverStop), ""); Listening = false; state = LinkStates.ready; clock.Stop(); tcp.Stop(); stopped?.Invoke(); foreach (var c in _clients) { c.Stop(); } _clients.Clear(); tcp = null; clock = null; debugInstances.Remove(this); }
} // SendRadioCommand public void Abort() { if (enmState != LinkStates.Connected) { Close(); return; } try { cancelTokenSource.Cancel(); // cancels any pending reads objTCPPort.Close(); } catch (Exception ex) { Log.Error("[TelnetClient.Abort] " + ex.Message); } enmState = LinkStates.LinkFailed; } // Abort
void UpdateRunning() { float h = Input.GetAxis("H-Axis"); float v = Input.GetAxis("V-Axis"); if (h == 0.0f && v == 0.0f) state = LinkStates.Idle; StepSFX(); ObstacleTest(); Vector3 cameraEulerAngles = mainCamera.transform.eulerAngles; cameraEulerAngles.x = 0; cameraEulerAngles.z = 0; if (v != 0.0f) { if (cameraController.isTargeting) transform.position += (mainCamera.transform.forward * v * 5.5f) * Time.deltaTime; else { if (v < 0.0f) transform.eulerAngles = cameraEulerAngles + new Vector3(0, 180, 0); else transform.eulerAngles = cameraEulerAngles; } } if (h != 0.0f) { if (cameraController.isTargeting) transform.position += (mainCamera.transform.right * h * 5.5f) * Time.deltaTime; else { if (h < 0.0f) transform.eulerAngles = cameraEulerAngles - new Vector3(0, 90, 0); else transform.eulerAngles = cameraEulerAngles + new Vector3(0, 90, 0); } } if (!cameraController.isTargeting) transform.position += (transform.forward * 5.5f) * Time.deltaTime; }
void UpdateIdle() { if (Input.GetKey(KeyCode.UpArrow) || (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))) state = LinkStates.Running; ObstacleTest(); }
public void Poll() { if (Globals.blnChannelActive == false) { return; } if (enmState != LinkStates.Connected) { intTimeout += 1; if (intTimeout > 100) // Approx 10 seconds worth of timer ticks... { intTimeout = 0; if (Globals.UseRMSRelay()) { Globals.queChannelDisplay.Enqueue("R*** No connection to RMS Relay at " + DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm UTC")); } else { Globals.queChannelDisplay.Enqueue("R*** No connection to WL2K CMS Telnet at " + DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm UTC")); } enmState = LinkStates.LinkFailed; cancelTokenSource.Cancel(); // cancels any pending reads objTCPPort.Close(); } } while (queDataBytesIn.Count > 0) { byte[] bytIn; try { bytIn = (byte[])queDataBytesIn.Dequeue(); } catch { break; } if (enmState == LinkStates.Connected) { objProtocol.ChannelInput(ref bytIn); } else { SignInLine(Globals.GetString(bytIn)); } } if (enmState == LinkStates.LinkFailed) { if (objTCPPort is object) { if (objTCPPort.Connected) { Disconnect(); } } else { try { if (objProtocol != null) { objProtocol.LinkStateChange(ConnectionOrigin.Disconnected); objProtocol = null; } } catch (Exception ex) { Log.Error("[ModemTelnet.Poll] " + ex.Message); } } } } // Poll
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);
} // New // Function to open the KISS TNC private bool Open() { bool OpenRet = default; OpenRet = true; string strConfiguration; bool blnInKissStartSequence = false; var strLine = default(string); bool blnOnAir1200 = false; bool blnOnAir9600 = false; strAPSFile = Globals.stcSelectedChannel.TNCConfigurationFile; if (File.Exists(strAPSFile) == false) { Globals.queChannelDisplay.Enqueue("R*** .aps Configuration file not found..."); OpenRet = false; } else { try { strConfiguration = File.ReadAllText(strAPSFile); var objStringReader = new StringReader(strConfiguration); do { try { strLine = objStringReader.ReadLine(); if (string.IsNullOrEmpty(strLine)) { break; } var strCommand = strLine.Split(';'); if (!string.IsNullOrEmpty(strCommand[0].Trim())) { var strTokens = strCommand[0].Trim().Split(' '); var switchExpr = strTokens[0].Trim().ToUpper(); switch (switchExpr) { // These key words define the 1200 and 9600 baud segments case "BEGIN1200B": { blnOnAir1200 = true; blnOnAir9600 = false; break; } case "BEGIN9600B": { blnOnAir9600 = true; blnOnAir1200 = false; break; } case "END1200B": { blnOnAir9600 = false; blnOnAir1200 = false; if (Globals.stcSelectedChannel.TNCOnAirBaud == 1200) { break; } break; } case "END9600B": { blnOnAir9600 = false; blnOnAir1200 = false; if (Globals.stcSelectedChannel.TNCOnAirBaud == 9600) { break; } break; } } if (blnOnAir1200 & Globals.stcSelectedChannel.TNCOnAirBaud == 1200 | blnOnAir9600 & Globals.stcSelectedChannel.TNCOnAirBaud == 9600) { var switchExpr1 = strTokens[0].Trim().ToUpper(); switch (switchExpr1) { case "KISSSTART": { strKissStart = new string[0]; blnInKissStartSequence = true; break; } case "KISSEND": { blnInKissStartSequence = false; break; } case "TXDELAY": { intTXDelay = Convert.ToInt32(strTokens[1]); break; } case "PERSISTANCE": { intPersistance = Convert.ToInt32(strTokens[1]); break; } case "SLOTTIME": { intSlottime = Convert.ToInt32(strTokens[1]); break; } case "FULLDUPLEX": { blnFullDuplex = Convert.ToBoolean(strTokens[1]); break; } case "MAXFRAMESIZE": { intMaxFrameSize = Convert.ToInt32(strTokens[1]); break; } case "MAXFRAMES": { intMaxFrames = Convert.ToInt32(strTokens[1]); break; } case "ACKTIMER": { intACKTimer = Convert.ToInt32(strTokens[1]); break; } case "MAXRETRY": { intMaxRetry = Convert.ToInt32(strTokens[1]); break; } case "POLLTHRESH": { intPollThresh = Convert.ToInt32(strTokens[1]); break; } case "KISSEXIT": { blnExitKiss = Convert.ToBoolean(strTokens[1]); break; } case "ESCAPE": { strEscapeChars = strTokens[1].Trim(); break; } default: { if (blnInKissStartSequence) { Array.Resize(ref strKissStart, strKissStart.Length + 1); strKissStart[strKissStart.Length - 1] = strCommand[0].Trim().ToUpper(); } break; } } } } } catch (Exception ex) { Log.Error("[ModemNativeKiss.Open] " + strLine + Globals.CR + ex.Message); } }while (true); } catch (Exception ex) { Log.Error("[ModemNativeKiss.Open] " + ex.Message); } } if (objSerial != null) { objSerial.Close(); Thread.Sleep(Globals.intComCloseTime); objSerial.Dispose(); objSerial = null; } // Open the serial port... try { objSerial = new SerialPort( Globals.stcSelectedChannel.TNCSerialPort, Convert.ToInt32(Globals.stcSelectedChannel.TNCBaudRate), Parity.None, 8, StopBits.One); objSerial.Handshake = Handshake.None; objSerial.RtsEnable = true; try { objSerial.Open(); } catch { Globals.queChannelDisplay.Enqueue("R*** Failed to open serial port on " + Globals.stcSelectedChannel.TNCSerialPort + ". Port may be in use by another application."); Log.Error("[ClinetNativeKISS.Open] Failed to open serial port on " + Globals.stcSelectedChannel.TNCSerialPort); return(false); } if (objSerial.IsOpen == false) { Globals.queChannelDisplay.Enqueue("R*** Failed to open serial port on " + Globals.stcSelectedChannel.TNCSerialPort + ". Port may be in use by another application."); Log.Error("[ModemNativeKiss.Open] Failed to open serial port on " + Globals.stcSelectedChannel.TNCSerialPort); return(false); } else { Globals.queChannelDisplay.Enqueue("G*** Serial port " + Globals.stcSelectedChannel.TNCSerialPort + " opened"); } } catch (Exception ex) { Log.Error("[ModemNativeKiss.Open] " + ex.Message); return(false); } OpenRet = InitializeKISSTnc(); // initialize the TNC to KISS mode if (OpenRet == false) { Log.Error("[ClientNativeKiss.Open] Failed to Initialize KISS TNC"); enmState = LinkStates.LinkFailed; if (objSerial != null) { objSerial.Close(); Thread.Sleep(Globals.intComCloseTime); objSerial.Dispose(); objSerial = null; } return(false); } else { // All OK so set up Peter's Native KISS DLL try { objKissComPort = new COMPort(objSerial); // Globals.stcSelectedChannel.TNCSerialPort, Convert.ToInt32(Globals.stcSelectedChannel.TNCBaudRate)); // set up the optional escape characters if (!string.IsNullOrEmpty(strEscapeChars)) { objKissComPort.escapedCharList = strEscapeChars; // Escape characters from .aps file } objKissChannel = objKissComPort.CreateChannel(0); // Create TNC Channel 0 objKissDLProvider = objKissChannel.CreateProvider(Globals.SiteCallsign); // Create a DLProvider for the Site Call sign // set up the KISS parameters from default values or as updated from the .aps file objConParam = new Connection.ConnectionParameterBuf(); objConParam.ackTimer = 1000 * intACKTimer; // convert from Sec to ms. objConParam.maxRetry = intMaxRetry; objConParam.maxIFrame = intMaxFrameSize; objConParam.maxWindowSize = intMaxFrames; objConParam.pollThresh = 1000 * intPollThresh; // convert from Sec to ms objKissChannel.SetPersistence(intPersistance); objKissChannel.SetSlotTime(intSlottime); objKissChannel.SetTXDelay(intTXDelay); objKissChannel.SetTXFullDuplex(Convert.ToInt32(blnFullDuplex)); enmState = LinkStates.Initialized; } catch (Exception ex) { Log.Error("[ClientNativeKiss.Open] Call to DLL Error: " + ex.ToString()); return(false); } } // Extended logging added for debugging if (File.Exists(Globals.SiteRootDirectory + @"Log\NativeKISSax25PktLog.log")) { File.Delete(Globals.SiteRootDirectory + @"Log\NativeKISSax25PktLog.log"); } Support.pktLogFile = Globals.SiteRootDirectory + @"Log\NativeKISSax25PktLog.log"; objKissChannel.packetMonitorEnable = TNCChannel.PacketMonitorType.LogFile; return(OpenRet); } // Open