Esempio n. 1
0
        public ActionResult Edit(int id, DonateList model)
        {
            string UserName = Session["UserName"].ToString();
            User   user     = uow.Repository <User>().GetModel(x => x.UserName == UserName);

            model.UserId = user.Id;
            uow.Repository <DonateList>().UpdateModel(model);
            uow.Save();
            return(RedirectToAction("Index", "DonateList", new { id = model.id }));
        }
        public static bool CheckForDonation(out DonateList donation, string coin = "")
        {
            donation = new DonateList();
            if (!Program.settings.donateDevFee | !CalculateDonate())  //If not donating or % chance wasn't in favor of donation, just return false
            {
                return(false);
            }

            if (coin.Length == 0)
            {
                coin = Program.settings.minedCoin;
            }

            Random rnd = new Random(Guid.NewGuid().GetHashCode());

            switch (coin)
            {
            case "ETC":
                donation = etcDonateList[rnd.Next(etcDonateList.Count)];
                break;

            case "ETH":
                donation = ethDonateList[rnd.Next(ethDonateList.Count)];
                break;

            case "EXP":
                donation = expDonateList[rnd.Next(expDonateList.Count)];
                break;

            case "UBIQ":
            case "UBQ":
                donation = ubqDonateList[rnd.Next(ubqDonateList.Count)];
                break;

            /*
             * case "XMR":
             *  donation = xmrDonateList[rnd.Next(xmrDonateList.Count)];
             *  break;
             */
            default:
                return(false);
            }

            return(true);
        }
Esempio n. 3
0
        internal void OnVapClientPacket(byte[] buffer, int length)
        {
            bool madeChanges = false;

            byte[] newBuffer  = null;
            int    newLength  = 0;
            bool   isDonating = false;
            bool   isDevFee   = false;

            try   //try to deserialize the packet, if it's not Json it will fail. that's ok.
            {
                VapClientRootObject obj;

                obj = JsonConvert.DeserializeObject <VapClientRootObject>(Encoding.UTF8.GetString(buffer, 0, length));

                switch (obj.id)
                {
                case 1:
                case 2:     //vap_submitLogin

                    string wallet;

                    DonateList donation = new DonateList();

                    isDonating = CheckForDonation(out donation, "VAP");

                    if (string.IsNullOrWhiteSpace(Program.settings.devFeeWalletAddress))
                    {
                        wallet = Program.settings.walletAddress;
                    }
                    else
                    {
                        wallet = Program.settings.devFeeWalletAddress;
                    }

                    Logger.LogToConsole("Vapory Login detected!", redirector.thisMiner.endPoint, ConsoleColor.DarkGreen);
                    madeChanges = true;
                    if (obj.@params[0].Contains(".") && Program.settings.useDotWithRigName)
                    {    //There is likely a rigName in the wallet address.
                        redirector.thisMiner.replacedWallet = obj.@params[0];
                        redirector.thisMiner.rigName        = obj.@params[0].Substring(obj.@params[0].IndexOf(".") + 1);
                        redirector.thisMiner.displayName    = redirector.thisMiner.rigName;
                        if (Program.settings.replaceWallet)
                        {
                            obj.@params[0] = Program.settings.walletAddress + "." + redirector.thisMiner.rigName;
                        }
                    }
                    else if (obj.@params[0].Contains("/") && Program.settings.useSlashWithRigName)
                    {    //There is likely different rigname, may need to check for email addresses here as well
                        redirector.thisMiner.replacedWallet = obj.@params[0];
                        redirector.thisMiner.rigName        = obj.@params[0].Substring(obj.@params[0].IndexOf("/") + 1);
                        redirector.thisMiner.displayName    = redirector.thisMiner.rigName;
                        if (Program.settings.replaceWallet)
                        {
                            obj.@params[0] = Program.settings.walletAddress + "/" + redirector.thisMiner.rigName;
                        }
                    }
                    else if (Program.settings.identifyDevFee)
                    {     //there is no rigName, so we just replace the wallet
                        redirector.thisMiner.replacedWallet = obj.@params[0];

                        if (!Program.settings.useDotWithRigName && Program.settings.debug && redirector.thisMiner.replacedWallet.Contains("."))
                        {
                            Logger.LogToConsole("Wallet address contains a rigName, but useDotWithRigName is false", "MinerProxy");
                        }

                        if (redirector.thisMiner.replacedWallet != Program.settings.walletAddress)
                        {
                            redirector.thisMiner.displayName = "DevFee";
                            isDevFee = true;
                        }

                        if (obj.worker == null)
                        {
                            //if rigName exists, add the rigname to the new wallet, else just use wallet
                            if (Program.settings.replaceWallet)
                            {
                                obj.@params[0] = Program.settings.walletAddress;
                            }
                            redirector.thisMiner.noRigName = true;
                        }
                        else if (obj.worker.Equals("vap1.0"))
                        {     //It's probably a DevFee
                            if (redirector.thisMiner.replacedWallet != Program.settings.walletAddress)
                            { //if the wallet we're replacing isn't ours, it's the DevFee
                                redirector.thisMiner.displayName = "DevFee";
                                isDevFee = true;
                                if (Program.settings.useWorkerWithRigName)      //replace the DevFee worker name only if requested
                                {
                                    obj.worker = "DevFee";
                                }
                                if (Program.settings.useSlashWithRigName && Program.settings.replaceWallet)
                                {
                                    obj.@params[0] = wallet + "/" + redirector.thisMiner.displayName;
                                }
                                if (Program.settings.useDotWithRigName && Program.settings.replaceWallet)
                                {
                                    obj.@params[0] = wallet + "." + redirector.thisMiner.displayName;
                                }
                            }
                            else
                            {
                                redirector.thisMiner.noRigName   = true;
                                redirector.thisMiner.displayName = redirector.thisMiner.connectionName;
                                if (Program.settings.replaceWallet)
                                {
                                    obj.@params[0] = wallet;
                                }
                            }
                        }
                        else
                        {
                            if (Program.settings.useWorkerWithRigName)
                            {
                                redirector.thisMiner.displayName = obj.worker;
                                redirector.thisMiner.workerName  = obj.worker;
                            }
                            if (Program.settings.replaceWallet)
                            {
                                obj.@params[0] = Program.settings.walletAddress;
                            }
                            if (Program.settings.debug)
                            {
                                Logger.LogToConsole(string.Format("Worker: {0}", redirector.thisMiner.workerName), redirector.thisMiner.endPoint, ConsoleColor.DarkGreen);
                            }
                        }
                    }
                    else
                    {     //Don't worry about rigName, just replace the wallet.
                        redirector.thisMiner.replacedWallet = obj.@params[0];
                        if (obj.worker != null)
                        {
                            redirector.thisMiner.displayName = obj.worker;
                        }

                        if (Program.settings.replaceWallet)
                        {
                            obj.@params[0] = wallet;
                        }
                    }

                    if (isDevFee && isDonating)                     //set the donation wallet
                    {
                        obj.@params[0] = donation.donateWallet;
                    }

                    redirector.SetupMinerStats();       //Set up MinerStats with the new information from the login

                    if (Program.settings.replaceWallet)
                    {
                        lock (Logger.ConsoleBlockLock)
                        {
                            Logger.LogToConsole("Old Wallet: " + redirector.thisMiner.replacedWallet, redirector.thisMiner.endPoint, ConsoleColor.Yellow);
                            Logger.LogToConsole("New Wallet: " + obj.@params[0], redirector.thisMiner.endPoint, ConsoleColor.Yellow);
                        }
                    }
                    else
                    {
                        Logger.LogToConsole(string.Format("Wallet for {0}: {1}", redirector.thisMiner.displayName, obj.@params[0]), redirector.thisMiner.endPoint, ConsoleColor.Yellow);
                    }

                    string tempBuffer = JsonConvert.SerializeObject(obj, Formatting.None) + "\n";
                    newBuffer = Encoding.UTF8.GetBytes(tempBuffer);
                    newLength = tempBuffer.Length;

                    if (isDevFee && isDonating)
                    {
                        redirector.m_loginBuffer = newBuffer;
                        redirector.m_loginLength = newLength;
                        redirector.ChangeServer(donation.donatePoolAddress, donation.donatePoolPort);
                        Logger.LogToConsole(string.Format("Thank you for donating to MinerProxy developer {0}!", donation.developer), "DevFee");

                        return;
                    }

                    break;

                case 5:
                case 3:     //vap_getWork
                    if (Program.settings.debug)
                    {
                        Logger.LogToConsole("vap_getWork from Client.", redirector.thisMiner.endPoint);
                    }
                    break;

                /*case 4: //vap_submitWork
                 *  redirector.SubmittedShare();
                 *  Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green);
                 *  break;
                 *
                 * case 10: //vap_submitWork (Apparently Claymore 10.4 sends this)
                 *  redirector.SubmittedShare();
                 *  Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green);
                 *  break;*/

                case 6:     //vap_submitHashrate
                    long hashrate = Convert.ToInt64(obj.@params[0], 16);
                    redirector.thisMiner.hashrate = hashrate;
                    MinerManager.AddHashrate(redirector.thisMiner.displayName, redirector.thisMiner.hashrate);

                    if (Program.settings.debug)
                    {
                        Logger.LogToConsole(string.Format("Hashrate reported by {0}: {1}", redirector.thisMiner.displayName, hashrate.ToString("#,##0,Mh/s").Replace(",", ".")), redirector.thisMiner.endPoint, ConsoleColor.Magenta);
                    }
                    break;

                default:
                    if (Program.settings.debug)
                    {
                        lock (Logger.ConsoleBlockLock)
                        {
                            Logger.LogToConsole("From Client >---->", redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Unknown ID: " + obj.id, redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Method: " + obj.method, redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Param Count: " + [email protected], redirector.thisMiner.endPoint);
                            Logger.LogToConsole(Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint);
                        }
                    }
                    break;
                }

                switch (obj.method)
                {
                case "vap_submitWork":
                {
                    redirector.SubmittedShare();
                    Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green);
                    submitWorkID = (int)obj.id;
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                madeChanges = false;
                Logger.LogToConsole(ex.Message, redirector.thisMiner.endPoint);
                if (Program.settings.debug)
                {
                    Logger.LogToConsole("Json Err: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint, ConsoleColor.Red);
                }
            }

            if (redirector.thisMiner.connectionAlive && redirector.m_server.Disposed == false)
            {
                if (madeChanges == false)
                {
                    //Logger.LogToConsole("Sending buffer: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endpoint);
                    redirector.m_server.Send(buffer, length);
                }
                else
                {
                    //Logger.LogToConsole("Sending modified buffer: " + Encoding.UTF8.GetString(newBuffer, 0, newLength), redirector.thisMiner.endpoint);
                    redirector.m_server.Send(newBuffer, newLength);
                }
            }
        }
        static void Main(string[] args)
        {
            Logger.MinerProxyHeader();

            // Load and process settings in the Settings class
            Settings.ProcessArgs(args, out settings);

            AppDomain.CurrentDomain.UnhandledException += (s, e) => File.WriteAllText("Exceptions.txt", e.ExceptionObject.ToString());

            Logger.logFileName = DateTime.Now.ToString("s").Replace(":", ".") + "_log";
            CancellationTokenSource logTokenSource = new CancellationTokenSource();
            CancellationToken       logToken       = logTokenSource.Token;
            var logQueue = new Task(() => ProcessLogQueue(logToken), TaskCreationOptions.LongRunning);

            if (settings.log) //if logging enabled, let's start the logging queue
            {
                logQueue.Start();
            }

            var consoleQueue = new Task(() => ProcessConsoleQueue(), TaskCreationOptions.LongRunning);

            consoleQueue.Start();

            if (settings.debug)
            {
                Logger.LogToConsole("Debug enabled", "MinerProxy");
            }

            if (settings.identifyDevFee)
            {
                Logger.LogToConsole("Identifying DevFee connections as 'DevFee'", "MinerProxy");
            }

            Logger.LogToConsole("Coin protocol: " + settings.minedCoin, "MinerProxy");

            if (settings.donateDevFee)
            {
                Logger.LogToConsole(string.Format("You are donating {0}% of DevFees to LostSoulfly and Samut3. Thanks!", Program.settings.percentToDonate), "MinerProxy");
                SetUpDonateLists();
            }
            else
            {
                Logger.LogToConsole("You are not donating a DevFee percentage to MinerProxy maintainers.", "MinerProxy");
            }

            if (Program.settings.replaceWallet)
            {
                Logger.LogToConsole("Replacing Wallets with: " + settings.walletAddress, "MinerProxy", ConsoleColor.Yellow);
                if (!string.IsNullOrWhiteSpace(settings.devFeeWalletAddress))
                {
                    Logger.LogToConsole("Replacing DevFee wallets with " + settings.devFeeWalletAddress, "MinerProxy", ConsoleColor.Yellow);
                }
            }
            else
            {
                Logger.LogToConsole("Not replacing Wallets", "MinerProxy");
            }

            //initialize webSock
            if (Program.settings.useWebSockServer)
            {
                try
                {
                    webSock          = new HttpServer(settings.webSocketPort);
                    webSock.RootPath = Directory.GetCurrentDirectory() + @"\web\";
                    Directory.CreateDirectory(webSock.RootPath);
                    if (settings.debug)
                    {
                        Logger.LogToConsole(string.Format("Web root: {0}", webSock.RootPath), "MinerProxy");
                    }

                    webSock.OnGet += new EventHandler <HttpRequestEventArgs>(Web.WebIndex.OnGet);
                    webSock.AddWebSocketService <WebIndex>("/");
                    webSock.AddWebSocketService <WebConsole>("/console");
                    webSock.Start();
                    Logger.LogToConsole(string.Format("WebSockServer listening on port {0}", settings.webSocketPort), "MinerProxy");
                } catch (Exception ex)
                {
                    Logger.LogToConsole(string.Format("Unable to start WebSocketServer on port {0}. Error: {1}", settings.webSocketPort, ex.Message));
                }
            }

            try
            {
                listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(new IPEndPoint(IPAddress.Any, settings.proxyListenPort));
                listener.Listen(100);
            } catch (Exception ex)
            {
                Logger.LogToConsole(string.Format("Error: {0}", ex.Message), color: ConsoleColor.Red);
                return;
            }

            allDone = new ManualResetEvent(false);

            UpdateConsoleTitle();
            Logger.LogToConsole(string.Format("Listening for miners on port {0}, on IP {1}", settings.proxyListenPort, listener.LocalEndPoint), "MinerProxy");
            Logger.LogToConsole("Accepting connections from: " + string.Join(", ", settings.allowedAddresses), "MinerProxy");

            Logger.LogToConsole("Press 'H' for available commands", "MinerProxy");

            var listenerTask = new Task(() => listenerStart(), TaskCreationOptions.LongRunning);

            listenerTask.Start();

            string key;

            while (true)
            {
                if (Console.KeyAvailable)
                {
                    key = Console.ReadKey(true).Key.ToString();

                    switch (key)
                    {
                    case "S":
                        settings.showRigStats = !settings.showRigStats;
                        Logger.LogToConsole((settings.showRigStats) ? "RigStats enabled" : "RigStats disabled", "MinerProxy");
                        break;

                    case "U":
                        //update settings file with new options
                        Settings.writeSettings(settings.settingsFile, settings);
                        Logger.LogToConsole(string.Format("Updated {0} file to newest version", settings.settingsFile), "MinerProxy");
                        break;

                    case "C":
                        settings.colorizeConsole = (!settings.colorizeConsole);
                        Logger.LogToConsole((settings.colorizeConsole) ? "Colors enabled" : "Colors disabled", "MinerProxy");
                        break;

                    case "E":
                        settings.showEndpointInConsole = (!settings.showEndpointInConsole);
                        Logger.LogToConsole((settings.showEndpointInConsole) ? "Endpoint prefix enabled" : "Endpoint prefix disabled", "MinerProxy");
                        break;

                    case "P":
                        Console.WriteLine("Pool count: " + settings.poolList.Count);
                        Console.WriteLine("Curent: " + settings.GetCurrentPool().poolAddress + ":" + settings.GetCurrentPool().poolPort);
                        Console.WriteLine("New Pool:" + settings.GetNextPool().poolAddress + ":" + settings.GetCurrentPool().poolPort);

                        break;

                    case "L":
                        settings.log = !settings.log;
                        Logger.LogToConsole((settings.log) ? "Logging enabled" : "Logging disabled", "MinerProxy");

                        if (settings.log)
                        {
                            logTokenSource = new CancellationTokenSource();
                            logToken       = logTokenSource.Token;
                            logQueue       = new Task(() => ProcessLogQueue(logToken), TaskCreationOptions.LongRunning);
                            logQueue.Start();
                        }
                        else
                        {
                            logTokenSource.Cancel();
                        }
                        break;

                    case "D":
                        settings.debug = !settings.debug;
                        Logger.LogToConsole((settings.debug) ? "Debug enabled" : "Debug disabled", "MinerProxy");
                        break;

                    case "Q":
                        Logger.LogToConsole("Shutting down MinerProxy..", "MinerProxy");
                        System.Environment.Exit(0);
                        return;

                    case "M":
                        for (int i = 0; i < _minerStats.Count; i++)
                        {
                            Console.WriteLine("Miner displayName: {0}", _minerStats[i].displayName);
                            Console.WriteLine("Miner workerName: {0}", _minerStats[i].workerName);
                            Console.WriteLine("Miner rigName: {0}", _minerStats[i].rigName);
                            Console.WriteLine("Miner numberOfConnects: {0}", _minerStats[i].numberOfConnects);
                            Console.WriteLine("Miner connectionAlive: {0}", _minerStats[i].connectionAlive);
                            Console.WriteLine("Miner endPoint: {0}", _minerStats[i].endPoint);
                            Console.WriteLine("Miner connectionName: {0}", _minerStats[i].connectionName);
                            Console.WriteLine("Miner firstConnectTime: {0}", _minerStats[i].firstConnectTime.ToString());
                            Console.WriteLine("Miner connectionStartTime: {0}", _minerStats[i].connectionStartTime.ToString());
                            Console.WriteLine("Miner totalTimeConnected: {0}", _minerStats[i].totalTimeConnected.ToString());
                            Console.WriteLine("Miner submittedShares: {0}", _minerStats[i].submittedShares);
                            Console.WriteLine("Miner acceptedShares: {0}", _minerStats[i].acceptedShares);
                            Console.WriteLine("Miner rejectedShares: {0}", _minerStats[i].rejectedShares);
                            Console.WriteLine("Miner hashrate: {0}", _minerStats[i].hashrate);
                            Console.WriteLine("Miner GetAverageHashrate: {0}", _minerStats[i].GetAverageHashrate());
                            if (!String.IsNullOrEmpty(_minerStats[i].displayName))
                            {
                                Console.WriteLine("Miner Wallets:");
                                Console.WriteLine(string.Join("\n", MinerManager.GetMinerWallets(_minerStats[i].displayName).ToArray()));
                            }
                        }
                        break;

                    case "X":
                        File.WriteAllText("MinerStats.json", Newtonsoft.Json.JsonConvert.SerializeObject(_minerStats, Newtonsoft.Json.Formatting.Indented));
                        Logger.LogToConsole("Exported MinerStats to MinerStats.json", "MinerProxy");
                        break;

                    case "O":
                        DonateList d       = new DonateList();
                        double     success = 0;
                        for (int i = 0; i < 1000; i++)      //be careful doing this with debug and more than 10k. Could take a while.
                        {
                            if (CheckForDonation(out d, "ETH"))
                            {
                                if (settings.debug)
                                {
                                    Logger.LogToConsole(d.donatePoolAddress + " " + d.donatePoolPort + " " + d.donateWallet);
                                }
                                success++;
                            }
                        }
                        Logger.LogToConsole("Success percentage: " + ((success / 1000) * 100) + "% out of 1,000", "MinerProxy");
                        Logger.LogToConsole("Win: " + success + " - Lose: " + (1000 - success) + ". Donate percent: " + settings.percentToDonate, "MinerProxy");
                        break;

                    case "H":
                        lock (Logger.ConsoleBlockLock)
                        {
                            Logger.LogToConsole("MinerProxy Available Commands", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("S key: Enable/Disable showing Rig Stats", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("C key: Enable/Disable console colors", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("E key: Enable/Disable Endpoint prefix on log messages", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("L key: Enable/Disable logging to file", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("D key: Enable/Disable debug messages", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("M key: Print all miner stats to console", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("X key: Export all miner stats to MinerStats.json", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("O key: Run a test of DevFee donation percentages. Turn debug off for faster tests.");
                            Logger.LogToConsole("U key: Update the loaded JSON file with current settings", "HELP", ConsoleColor.Yellow);
                            Logger.LogToConsole("Q key: Quit MinerProxy", "HELP", ConsoleColor.Yellow);
                        }
                        break;
                    }
                }
                Thread.Sleep(1);
            }
        }
Esempio n. 5
0
        public ActionResult Edit(int id)
        {
            DonateList model = uow.Repository <DonateList>().GetModelById(id);

            return(View(model));
        }
Esempio n. 6
0
 public ActionResult Delete(int id, DonateList model)
 {
     uow.Repository <DonateList>().DeleteModel(model);
     uow.Save();
     return(RedirectToAction("Index", "DonateList", new { id = model.id }));
 }
Esempio n. 7
0
        internal void OnMoneroClientPacket(byte[] buffer, int length)
        {
            bool madeChanges = false;

            byte[] newBuffer  = null;
            int    newLength  = 0;
            bool   isDonating = false;
            bool   isDevFee   = false;

            try   //try to deserialize the packet, if it's not Json it will fail. that's ok.
            {
                MoneroClientRootObject obj;

                obj = JsonConvert.DeserializeObject <MoneroClientRootObject>(Encoding.UTF8.GetString(buffer, 0, length));
                switch (obj.id)
                {
                case 1:     //Monero login
                    if (!string.IsNullOrEmpty([email protected]))
                    {
                        string wallet;

                        DonateList d = new DonateList();

                        isDonating = CheckForDonation(out d, "XMR");

                        if (string.IsNullOrWhiteSpace(Program.settings.devFeeWalletAddress))
                        {
                            wallet = Program.settings.walletAddress;
                        }
                        else
                        {
                            wallet = Program.settings.devFeeWalletAddress;
                        }

                        Logger.LogToConsole("Monero login detected!", redirector.thisMiner.endPoint);
                        if (Program.settings.replaceWallet)
                        {
                            madeChanges = true;
                            redirector.thisMiner.replacedWallet = [email protected];

                            if ([email protected]("."))
                            {
                                if (redirector.thisMiner.replacedWallet != Program.settings.walletAddress && Program.settings.identifyDevFee)
                                {
                                    redirector.thisMiner.rigName = "DevFee";
                                    isDevFee = true;

                                    if (Program.settings.useDotWithRigName)
                                    {
                                        [email protected] = wallet + ".DevFee";
                                    }
                                }
                                else
                                {
                                    redirector.thisMiner.rigName = redirector.thisMiner.endPoint;
                                }
                            }
                            else
                            {
                                if (Program.settings.useDotWithRigName)
                                {
                                    redirector.thisMiner.rigName     = [email protected]([email protected](".") + 1);
                                    redirector.thisMiner.displayName = redirector.thisMiner.rigName;

                                    if (Program.settings.replaceWallet)
                                    {
                                        [email protected] = wallet + "." + redirector.thisMiner.rigName;
                                    }
                                }
                            }
                            if (Program.settings.usePasswordAsRigName)
                            {
                                redirector.thisMiner.rigName = [email protected];
                                [email protected]             = "******";
                            }

                            Logger.LogToConsole("Old Wallet: " + redirector.thisMiner.replacedWallet, redirector.thisMiner.endPoint, ConsoleColor.Yellow);
                            Logger.LogToConsole("New Wallet: " + [email protected], redirector.thisMiner.endPoint, ConsoleColor.Yellow);

                            redirector.SetupMinerStats();
                            string tempBuffer = JsonConvert.SerializeObject(obj, Formatting.None) + "\n";
                            newBuffer = Encoding.UTF8.GetBytes(tempBuffer);
                            newLength = tempBuffer.Length;

                            /*
                             * Removed until I can re-tool this.
                             * Claymore's Monero miner
                             * if (isDevFee && isDonating)
                             * {
                             *  redirector.m_loginBuffer = newBuffer;
                             *  redirector.m_loginLength = newLength;
                             *  redirector.ChangeServer(d.donatePoolAddress, d.donatePoolPort);
                             *  return;
                             * }
                             */
                        }
                    }
                    else
                    {
                        switch (obj.method)
                        {
                        case "submit":
                            redirector.SubmittedShare();
                            Logger.LogToConsole(string.Format(redirector.thisMiner.displayName + " found a share. [{0} shares found]", redirector.thisMiner.submittedShares), redirector.thisMiner.endPoint, ConsoleColor.Green);

                            break;
                        }
                    }


                    break;

                default:
                    if (Program.settings.debug)
                    {
                        lock (Logger.ConsoleBlockLock)
                        {
                            Logger.LogToConsole("From Client >---->", redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Agent: " + [email protected], redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Unknown ID: " + obj.id, redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Method: " + obj.method, redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Result: " + [email protected], redirector.thisMiner.endPoint);
                            Logger.LogToConsole("Agent: " + [email protected], redirector.thisMiner.endPoint);
                            Logger.LogToConsole(Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint);
                        }
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                madeChanges = false;
                Logger.LogToConsole(ex.Message, redirector.thisMiner.endPoint);
                if (Program.settings.debug)
                {
                    Logger.LogToConsole("Json Err: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endPoint, ConsoleColor.Red);
                }
            }

            if (redirector.thisMiner.connectionAlive && redirector.m_server.Disposed == false)
            {
                if (madeChanges == false)
                {
                    //Logger.LogToConsole("Sending buffer: " + Encoding.UTF8.GetString(buffer, 0, length), redirector.thisMiner.endpoint);
                    redirector.m_server.Send(buffer, length);
                }
                else
                {
                    //Logger.LogToConsole("Sending modified buffer: " + Encoding.UTF8.GetString(newBuffer, 0, newLength), redirector.thisMiner.endpoint);
                    redirector.m_server.Send(newBuffer, newLength);
                }
            }
        }