Example #1
0
        static void Main()
        {
            bool firstProcess;

            Mutex ipgnBotMutex = new Mutex
            (
                true,
                "ipgnSteamBot_19899asdfffkk9921", //hopefully a mutex ID not currently present... if it is, well then shit
                out firstProcess
            );

            if (!firstProcess)
            {
                //An application using our mutex is already running (presumably the bot), therefore we need to end
                //this will show an error at some point
                MessageBox.Show("The bot is already running. If you can't see the process, check task manager");
                Thread.Sleep(10000);
                Application.Exit();
                return;
            }

            Application.SetCompatibleTextRenderingDefault(false);
            Application.EnableVisualStyles();

            ipgnBotWindow = new mainWindow();
            ipgnBotWindow.Show();

            ipgnBotSettings = new settingsHandler();

            botIP = ipgnBotSettings.botIP;
            botPort = ipgnBotSettings.botPort;
            botInterfacePassword = ipgnBotSettings.botPassword;

            if (ipgnBotSettings.firstRun)
            {
                MessageBox.Show("Default config has been created. Please edit and run the bot again");
                Application.Exit();
                return;
            }

            if (botInterfacePassword == "reindeer")
            {
                MessageBox.Show("You are currently using the default config. Please edit this and run the bot again");
                Application.Exit();
                return;
            }

            ipgnSteamInterface = new ipgnBotSteamInterface();

            bool waited = false;

            if (!ipgnSteamInterface.GetSteamClient()) //check to see if a client is running or not
            {
                logToWindow("Can't find steam client, exiting");
                Thread.Sleep(10000);
                return;
            }

            if (!ipgnSteamInterface.GetPipe()) //we can't get a pipe going of the steam api... usually means steam is still starting or something
            {
                logToWindow("Steam is currently starting up or something similar. Waiting for it to be ready");

                waited = true;

                while (!ipgnSteamInterface.GetPipe())
                {
                    Application.DoEvents();
                    Thread.Sleep(2000);
                }

                //just a double check to make sure we've got the pipe
                if (!ipgnSteamInterface.GetPipe())
                {
                    logToWindow("Something is fucky (Copyright Bubbles, TPB) and we couldn't get the pipe even after steam startup");
                    Thread.Sleep(10000);
                    return;
                }
            }

            //Now we need to get our user
            while (!ipgnSteamInterface.GetUser())
            {
                Application.DoEvents();
                Thread.Sleep(2000);
                logToWindow("Trying to get current steam user");
            }

            if (waited)
            {
                //We had to wait to get the pipe, so we should probably wait for steam to actually start
                Thread.Sleep(10000);
            }

            //Now let's try the user again
            if (!ipgnSteamInterface.GetUser())
            {
                logToWindow("Unable to get the steam user. Exiting");
                Thread.Sleep(10000);
                return;
            }

            //Check for the steam friends interface
            if (!ipgnSteamInterface.GetInterface())
            {
                logToWindow("Unable to get the friends interface. This could indicate a major steam change. I hope you know how to fix this. Contact bladez @ ipgn");
                Thread.Sleep(10000);
                /*No but really, if this is the case you'll probably either have to contact [email protected] (bladez),
                 * or if you're reading this comment you have the source, so you are able to update to the latest
                 * version of the Open Steam Works API available at http://opensteamworks.org/ (Update the Steam4NET
                 * project and recompile)
                 */

                return;
            }

            if (waited)
            {
                Thread.Sleep(10000);
                logToWindow("Chances are steam is now running properly");
            }

            //steam interface loaded, now try pug interface
            ipgnPugInterface = new ipgnBotPugInterface();

            /* Here we pass the object handles for each interface to one another, so they can each be used
             * inside one another. This is a slightly cleaner way than using public statics (though our objects
             * are exactly that), because it allows us to reference the object directly inside the other object
             * rather than calling from the main program
             */
            ipgnPugInterface.ipgnSteamInterfacePass(ipgnSteamInterface);
            ipgnSteamInterface.ipgnPugInterfacePass(ipgnPugInterface);

            ipgnPugInterface.connectToPugBot(new IPEndPoint(IPAddress.Parse(botIP), botPort), botInterfacePassword);

            while (firstProcess)
            {
                //Infinitely loop so we actually have an application ;D
                Application.DoEvents();
                Thread.Sleep(10);
            }

            GC.KeepAlive(ipgnBotMutex);
        }
 //void to handle the passing of the steam interface, so we can use it inside this object
 public void ipgnSteamInterfacePass(ipgnBotSteamInterface interfaceHandle)
 {
     ipgnSteamInterface = interfaceHandle;
 }