static async Task DoPingAndReconnect() { if (!await OtherCamCom.PingAdr(ConfigControl.savedIP.stringVal) || !sock.Connected) { OtherCamCom.LabelDisplay(false); TryConnect(); } }
public Uri ConfirmAdr(bool showErrors, string fullAdr, bool doPing) { try { Uri newUri = null; string errorMsg = ""; try { newUri = new Uri(fullAdr); } catch { errorMsg = "Address was invalid!\n"; } if (newUri != null && !ConfigControl.ignoreAddress.boolVal && settings.isMainPlayer && doPing) { if (!OtherCamCom.PingAdr(newUri.Host).Result) { errorMsg += "Address had no RTSP stream attached!\n"; } } if (errorMsg != "") { if (showErrors) { MessageBox.Show(errorMsg); } return(null); } return(newUri); } catch (Exception e) { if (showErrors) { Tools.ShowPopup("Failed to parse address!\nShow more?", "Error Occurred!", e.ToString()); } return(null); } }
private static bool Connect(IPEndPoint ep, bool showErrors) //Connects to the socket { try { if (sock == null || ep == null || ep.Address == null || ep.Port == 0 || ep.Address.ToString().Length == 0) { return(false); } else if (sock.Connected && ep.ToString() == sock.RemoteEndPoint.ToString()) { return(true); } else if (sock.Connected && ep.ToString() != sock.RemoteEndPoint.ToString()) { Console.WriteLine("trying to disconnect " + sock.RemoteEndPoint.ToString() + "\n" + ep.ToString()); Disconnect(true); } Console.WriteLine("trying to connect to " + ep.Address.ToString() + ":" + ep.Port.ToString()); if (!ConfigControl.forceCamera.boolVal) { InfoPanel.i.isCamera = false; } sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); bool parsedIP = IPAddress.TryParse(ep.Address.ToString(), out IPAddress ip); bool parsedPort = int.TryParse(ep.Port.ToString(), out int port); string errorMessage = "IP (" + ep.Address.ToString() + ") valid: " + parsedIP.ToString() + "\nPort (" + ep.Port.ToString() + ") valid: " + parsedPort.ToString(); if (!parsedIP || !parsedPort) { if (showErrors) { Tools.ShowPopup("Failed to parse endpoint!\nAddress provided is likely invalid!\nShow more?", "Failed to connect!", errorMessage); } return(false); } if (!OtherCamCom.PingAdr(ep.Address.ToString()).Result) { if (showErrors) { Tools.ShowPopup("Failed to ping IP address!\nAddress provided is likely invalid!\nShow more?", "Failed to connect!", errorMessage + "\nPing: Failed"); } return(false); } IPEndPoint end = new IPEndPoint(ip, port); if (end == null) { return(false); } OtherCamCom.CheckIsSameSubnet(ep.Address.ToString()); connecting = sock.BeginConnect(end, ConnectCallback, null); MainForm.m.WriteToResponses("Successfully connected to: " + end.Address.ToString() + ":" + end.Port.ToString(), true); InitReconnectTimer(); return(true); } catch (SocketException ex) { MainForm.m.WriteToResponses(ex.Message, false); } catch (ObjectDisposedException ex) { MainForm.m.WriteToResponses(ex.Message, false); } catch (Exception e) { if (showErrors) { MessageBox.Show("An error occured whilst connecting to camera!\n" + e.ToString()); } Console.WriteLine("CONNECT\n" + e.ToString()); } return(false); }