예제 #1
0
 public void Remove(CloudCoin coin)
 {
     Contents.cloudcoin.Remove(coin);
     onSafeContentChanged(new EventArgs());
     Save();
 }
예제 #2
0
        /* Writes a JPEG To the Export Folder */
        public bool WriteJpeg(CloudCoin cc, string tag, ref string path)
        {
            // Console.Out.WriteLine("Writing jpeg " + cc.sn);

            bool fileSavedSuccessfully = true;

            /* BUILD THE CLOUDCOIN STRING */
            String cloudCoinStr = "01C34A46494600010101006000601D05";             //THUMBNAIL HEADER BYTES

            for (int i = 0; (i < 25); i++)
            {
                cloudCoinStr = cloudCoinStr + cc.an[i];
            }                                                                         // end for each an

            cloudCoinStr += "204f42455920474f4420262044454645415420545952414e545320"; // Hex for " OBEY GOD & DEFEAT TYRANTS "
            cloudCoinStr += "00";                                                     // HC: Has comments. 00 = No
            cloudCoinStr += "00";                                                     // LHC = 100%
            //Calculate Expiration date
            DateTime date           = DateTime.Today;
            int      YEARSTILEXPIRE = 2;        //The rule is coins expire in two years.

            date.AddYears(YEARSTILEXPIRE);
            // this.ed = (date.Month + "-" + date.Year);
            cloudCoinStr += date.Month.ToString("X1");
            cloudCoinStr += date.Year.ToString("X3"); // 0x97E2;//Expiration date Sep. 2018

            cloudCoinStr += "01";                     //  cc.nn;//network number
            String hexSN     = cc.sn.ToString("X6");
            String fullHexSN = "";

            switch (hexSN.Length)
            {
            case 1: fullHexSN = ("00000" + hexSN); break;

            case 2: fullHexSN = ("0000" + hexSN); break;

            case 3: fullHexSN = ("000" + hexSN); break;

            case 4: fullHexSN = ("00" + hexSN); break;

            case 5: fullHexSN = ("0" + hexSN); break;

            case 6: fullHexSN = hexSN; break;
            }
            cloudCoinStr = (cloudCoinStr + fullHexSN);
            /* BYTES THAT WILL GO FROM 04 to 454 (Inclusive)*/
            byte[] ccArray = this.hexStringToByteArray(cloudCoinStr);


            ///* READ JPEG TEMPLATE*/
            //byte[] jpegBytes = null;
            //switch (getDenomination(cc.sn))
            //{
            //	case 1: jpegBytes = readBytesFromJpg(Environment.ExpandEnvironmentVariables(Properties.Settings.Default.UserCloudcoinTemplateDir) + "jpeg1.jpg"); break;
            //	case 5: jpegBytes = readBytesFromJpg(Environment.ExpandEnvironmentVariables(Properties.Settings.Default.UserCloudcoinTemplateDir) + "jpeg5.jpg"); break;
            //	case 25: jpegBytes = readBytesFromJpg(Environment.ExpandEnvironmentVariables(Properties.Settings.Default.UserCloudcoinTemplateDir) + "jpeg25.jpg"); break;
            //	case 100: jpegBytes = readBytesFromJpg(Environment.ExpandEnvironmentVariables(Properties.Settings.Default.UserCloudcoinTemplateDir) + "jpeg100.jpg"); break;
            //	case 250: jpegBytes = readBytesFromJpg(Environment.ExpandEnvironmentVariables(Properties.Settings.Default.UserCloudcoinTemplateDir) + "jpeg250.jpg"); break;

            //}// end switch


            ///* WRITE THE SERIAL NUMBER ON THE JPEG */

            //Bitmap bitmapimage;
            //using (var ms = new MemoryStream(jpegBytes))
            //{
            //	bitmapimage = new Bitmap(ms);
            //	// bitmapimage.Save(fileName2, ImageFormat.Jpeg);
            //}
            //Graphics graphics = Graphics.FromImage(bitmapimage);
            //graphics.SmoothingMode = SmoothingMode.AntiAlias;
            //graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            //PointF drawPointAddress = new PointF(10.0F, 10.0F);
            //graphics.DrawString(String.Format("{0:N0}", cc.sn) + " of 16,777,216 on Network: 1", new Font("Arial", 20), System.Drawing.Brushes.White, drawPointAddress);

            //ImageConverter converter = new ImageConverter();
            //byte[] snBytes = (byte[])converter.ConvertTo(bitmapimage, typeof(byte[]));

            UIImage jpgImage = null;

            switch (getDenomination(cc.sn))
            {
            case 1: jpgImage = UIImage.FromFile("jpeg1.jpg"); break;

            case 5: jpgImage = UIImage.FromFile("jpeg5.jpg"); break;

            case 25: jpgImage = UIImage.FromFile("jpeg25.jpg"); break;

            case 100: jpgImage = UIImage.FromFile("jpeg100.jpg"); break;

            case 250: jpgImage = UIImage.FromFile("jpeg250.jpg"); break;
            }

            var newImage = DrawFont(jpgImage, String.Format("{0:N0}", cc.sn) + " of 16,777,216 on Network: 1", new CGPoint(30f, 25f));

            Byte[] snBytes;
            using (NSData imageData = newImage.AsJPEG())
            {
                snBytes = new Byte[imageData.Length];
                System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, snBytes, 0, Convert.ToInt32(imageData.Length));
            }

            List <byte> b1 = new List <byte>(snBytes);
            List <byte> b2 = new List <byte>(ccArray);

            b1.InsertRange(4, b2);

            if (tag == "random")
            {
                Random r    = new Random();
                int    rInt = r.Next(100000, 1000000);              //for ints
                tag = rInt.ToString();
            }

            var           appDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
            string        folderPath  = appDelegate.ExportDir + tag + "_" + string.Format("{0:ddMMyyyy}", date) + "/";
            DirectoryInfo DI          = new DirectoryInfo(folderPath);

            if (!DI.Exists)
            {
                DI.Create();
            }

            string fileName    = getDenomination(cc.sn) + ".CloudCoin." + cc.nn + "." + cc.sn + ".";
            string jpgfileName = folderPath + fileName + tag + ".jpg";

            File.WriteAllBytes(jpgfileName, b1.ToArray());
            path = jpgfileName;

            return(fileSavedSuccessfully);
        }
예제 #3
0
        private async Task <ObservableStatus> ProcessFixingGUID(int guid_id, CloudCoin returnCoin, int coinindex)
        {
            fixer = new FixitHelper(guid_id, returnCoin.an);
            GetTicketResponse[] ticketStatus = new GetTicketResponse[3];
            ObservableStatus    result       = new ObservableStatus();

            int corner = 1;

            while (!fixer.finnished)
            {
                onCoinFixProcessing(new CoinFixProcessingEventArgs(coinindex, guid_id, corner));
                Logger.Write("Fixing coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ".", Logger.Level.Normal);
                string[] trustedServerAns = new string[]
                {
                    returnCoin.an[fixer.currentTriad[0].Number],
                    returnCoin.an[fixer.currentTriad[1].Number],
                    returnCoin.an[fixer.currentTriad[2].Number]
                };

                ticketStatus = await get_tickets(fixer.currentTriad, trustedServerAns, returnCoin.nn, returnCoin.sn, returnCoin.denomination);

                // See if there are errors in the tickets
                if (ticketStatus[0].status != "ticket" || ticketStatus[1].status != "ticket" || ticketStatus[2].status != "ticket")
                {// No tickets, go to next triad corner
                    Logger.Write("Fixing coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ". There is no three tickets from triad", Logger.Level.Normal);
                    corner++;
                    fixer.setCornerToCheck(corner);
                }
                else
                {// Has three good tickets
                    Logger.Write("Fixing coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ". We have three tickets. Going to fix.", Logger.Level.Normal);
                    var fff = await Instance.NodesArray[guid_id].fix(fixer.currentTriad, ticketStatus[0].message, ticketStatus[1].message,
                                                                     ticketStatus[2].message, returnCoin.pans[guid_id], returnCoin.sn);
                    if (fff.status == "success")  // the guid IS recovered!!!
                    {
                        Logger.Write("Coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ". Fixed!.", Logger.Level.Normal);
                        returnCoin.detectStatus[guid_id] = result.Status = CloudCoin.raidaNodeResponse.pass;
                        onCoinFixFinished(new CoinFixFinishedEventArgs(coinindex, guid_id, result.Status));
                        returnCoin.an[guid_id] = returnCoin.pans[guid_id];
                        fixer.finnished        = true;
                        return(result);
                    }
                    else if (fff.status == "fail")
                    { // command failed,  need to try another corner
                        Logger.Write("Coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ". Failed, trying another corner...", Logger.Level.Normal);
                        corner++;
                        fixer.setCornerToCheck(corner);
                        returnCoin.detectStatus[guid_id] = CloudCoin.raidaNodeResponse.fail;
                    }
                    else if (fff.status == "error")
                    {
                        Logger.Write("Coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ". Error, trying another corner....", Logger.Level.Normal);
                        corner++;
                        fixer.setCornerToCheck(corner);
                        returnCoin.detectStatus[guid_id] = CloudCoin.raidaNodeResponse.error;
                    }
                    else
                    {
                        Logger.Write("Coin " + returnCoin.sn + ", node " + guid_id + ", corner " + corner + ". Error, trying another corner....", Logger.Level.Normal);
                        corner++;
                        fixer.setCornerToCheck(corner);
                        returnCoin.detectStatus[guid_id] = CloudCoin.raidaNodeResponse.error;
                    }
                    //end if else fix was successful
                } //end if else one of the tickts has an error.
            }     //end while fixer not finnihsed.
            // the guid cannot be recovered! all corners checked
            Logger.Write("Coin " + returnCoin.sn + ", node " + guid_id + " was not fixed!", Logger.Level.Normal);
            result.Status = returnCoin.detectStatus[guid_id];
            onCoinFixFinished(new CoinFixFinishedEventArgs(coinindex, guid_id, result.Status));
            return(result);
        }
예제 #4
0
 public DetectCoinCompletedEventArgs(CloudCoin cc, Stopwatch stwtch)
 {
     coin = cc;
     sw   = stwtch;
 }