Beispiel #1
0
 static void Main()
 {
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     MemoryManager.AttachApp(true, true, new TimeSpan(0, 30, 0).Ticks, new TimeSpan(0, 2, 0).Ticks);
     OneInstance.Run(new MainForm(), "OGameOneAdmin");
 }
Beispiel #2
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            bool isAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);

            try
            {
                if (OneInstance.First())
                {
                    OneInstance.OnMessage += AddRelay;
                }

                else if (e.Args.Length > 0)
                {
                    OneInstance.SendMessage(new FileInfo(e.Args[0]).FullName);
                    Shutdown();
                    return;
                }

                if (e.Args.Length == 0)
                {
                    if (isAdmin)
                    {
                        InstallRegistry();
                    }

                    if (!stayOpen)
                    {
                        Shutdown();
                        return;
                    }
                }

                urlBase = listenPrefix.Replace("*", hostName).Replace("+", hostName).Replace(":80", "");
                var enableWebclient = bool.Parse(ConfigurationManager.AppSettings["enableWebClient"] ?? "true");
                var acceptRelays    = bool.Parse(ConfigurationManager.AppSettings["acceptRelays"] ?? "true");
                var maxConnections  = int.Parse(ConfigurationManager.AppSettings["maxConnections"] ?? "8");

                if (!string.IsNullOrEmpty(remoteHost))
                {
                    remote  = true;
                    urlBase = remoteHost.Replace("ws", "http");
                }
                else if (listenPrefix.AlreadyListening())
                {
                    remote     = true;
                    remoteHost = urlBase.Replace("http", "ws");
                }
                else
                {
                    remote = false;
                    server = new RelayServer()
                    {
                        EnableBuiltinWebclient = enableWebclient, AcceptSocketConnections = acceptRelays
                    };
                    stop   = new TaskCompletionSource <bool>();
                    listen = server.Listen(listenPrefix, maxConnections, stop);
                    if (listen.IsFaulted)
                    {
                        throw listen.Exception.InnerException;
                    }
                    server.OnSocketRelay += (file, size, code, relay) => AddRelayStatus(file, size, urlBase + code, relay);
                }

                urlBase += urlBase.EndsWith("/") ? "" : "/";
                urlBase  = Regex.Replace(urlBase, "localhost", hostName, RegexOptions.IgnoreCase);

                var idleStatus = $"{(remote ? "Relaying to" : "Listening on")} {urlBase}";
                if (!remote)
                {
                    idleStatus +=
                        $"\r\n{(acceptRelays ? "Accepting" : "Not accepting")} relays" +
                        $"\r\nWebclient is {(enableWebclient ? "enabled" : "disabled")}" +
                        $"\r\n{maxConnections} max connections";
                }

                relayStatus            = new RelayStatus(idleStatus);
                notifyIcon             = (TaskbarIcon)FindResource("NotifyIcon");
                notifyIcon.TrayToolTip = relayStatus;
                notifyIcon.DataContext = relayStatus;

                if (e.Args.Length > 0)
                {
                    AddRelay(e.Args[0]);
                }
                else
                {
                    notifyIcon.Icon = appIcon;
                    ShowRelays();
                }
            }
            catch (System.Net.HttpListenerException ex) when((uint)ex.HResult == 0x80004005)              // access denied
            {
                if (!isAdmin)
                {
                    OneInstance.Dispose();
                    Process.Start(new ProcessStartInfo(Assembly.GetEntryAssembly().Location, e.Args.Length > 0 ? e.Args[0] : "")
                    {
                        Verb = "runas"
                    });
                }
                else
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }

                Shutdown();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);

                Shutdown();
            }
        }