public void Remove(CloudCoin coin) { Contents.cloudcoin.Remove(coin); onSafeContentChanged(new EventArgs()); Save(); }
/* 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); }
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); }
public DetectCoinCompletedEventArgs(CloudCoin cc, Stopwatch stwtch) { coin = cc; sw = stwtch; }