private XXPSocketsModel XXPSocketsExecuteCallBack(XXPSocketsModel mod) { LogHelper.WriteMethodLog(true); XXPSocketsModel refMod = new XXPSocketsModel(); refMod.IpAddress = OSHelper.GetLocalIP(); refMod.Type = string.Empty; switch (mod.Type) { case XXPCoinMsgType.DBfile: refMod.Type = XXPCoinMsgType.DBfile; refMod.Value = HandlleDBfileEvent(mod); break; case XXPCoinMsgType.Handshake: refMod.Type = XXPCoinMsgType.Handshake; refMod.Value = this.HandlleHandshakeEvent(mod); break; case XXPCoinMsgType.NewAddresses: refMod.Type = XXPCoinMsgType.NewAddresses; refMod.Value = handleNewAddress(mod); break; case XXPCoinMsgType.SyncBlocks: refMod.Type = XXPCoinMsgType.SyncBlocks; refMod.Value = handleSyncBlocks(mod); break; case XXPCoinMsgType.Newtransactions: refMod.Type = XXPCoinMsgType.Newtransactions; refMod.Value = handleNewtransactions(mod); break; case XXPCoinMsgType.NewBlock: refMod.Type = XXPCoinMsgType.NewBlock; refMod.Value = handleNewBlock(mod); break; case XXPCoinMsgType.Message: break; default: break; } LogHelper.WriteMethodLog(false); return(refMod); }
public string ReserchNodes() { LogHelper.WriteMethodLog(true); AppSettings.SeedNodes = AppConfigHelper.GetConfigValByKey("SeedNodes"); var lstSeeds = (from x in AppSettings.SeedNodes.Split('|') where x != "" select x).ToList(); foreach (var item in lstSeeds) { if (item != OSHelper.GetLocalIP() && item != "127.0.0.1") { this.RequestHandshake(item); } } if (this.dicAddressesPool.Count == 0) { return("Connect to XXPCoin Net failed"); } HashSet <string> hsNew = new HashSet <string>(); foreach (var item in this.dicAddressesPool) { List <string> lstAddress = this.RequestMoreNodes(item.Key); foreach (var Adds in lstAddress) { if (Adds != OSHelper.GetLocalIP() && !this.dicAddressesPool.ContainsKey(Adds)) { if (!hsNew.Contains(Adds)) { hsNew.Add(Adds); } } } } foreach (var item in hsNew) { if (this.RequestHandshake(item)) { this.Add2AddressPool(item); } } LogHelper.WriteMethodLog(false); return(ConstHelper.BC_OK); }
private string handleNewAddress(XXPSocketsModel socketMod) { LogHelper.WriteMethodLog(true); string strRet = string.Empty; if (string.IsNullOrEmpty(socketMod.Value))// give my addresspool to sender { Dictionary <string, int> dicAddPool = new Dictionary <string, int>(); dicAddPool = this.dicAddressesPool; foreach (var item in dicAddPool) { strRet += item.Key + "|"; } return(strRet); } else // sender give his new addresses to me, handshake every one if dont contain { List <string> lstIpAddress = new List <string>(); if (!string.IsNullOrEmpty(socketMod.Value)) { lstIpAddress = (from x in socketMod.Value.Split('|') where x != "" select x).ToList(); } foreach (var item in lstIpAddress) { if (item == OSHelper.GetLocalIP()) { continue; } if (!this.dicAddressesPool.ContainsKey(item)) { this.RequestHandshake(item); } } LogHelper.WriteMethodLog(true); return("ths"); } }
private void ResearchNodes_Click(object sender, EventArgs e) { LogHelper.WriteMethodLog(true); string Ip = this.textBoxSeedIP.Text; //step1 handshake bool bRet = this.commHandler.RequestHandshake(Ip); if (!bRet) { MessageBox.Show("Invalid seed IP"); return; } //step2 get more Nodes IP List <string> lstAddress = this.commHandler.RequestMoreNodes(Ip); List <string> lstNew = new List <string>(); // step3 handshake lstAddress foreach (var item in lstAddress) { if (item == OSHelper.GetLocalIP()) { continue; } if (this.commHandler.RequestHandshake(item)) { lstNew.Add(item); } } // step4 send new addresses to all I know this.commHandler.SendNewAddress2Others(lstNew); this.textBoxConnectedNodes.Text = this.commHandler.GetAddressCount().ToString(); if (LeveldbOperator.OpenDB(AppSettings.XXPDBFolder) != ConstHelper.BC_OK) { DBFileInfo df = this.commHandler.RequestHightestDBInfo(); string str = string.Format("Ip:{0}, highest:{1} size:{2}", df.IP, df.LastBlockHeight, df.DBFileSize); Task.Run(() => { string SavePath = Path.Combine(AppSettings.XXPTempFolder, ConstHelper.BC_DBZipName); long lRet = this.commHandler.StartReceiveFile(df.IP, df.DBFileSize, SavePath); if (lRet == -1) { MessageBox.Show("try later, there is a file transfering now"); } else { MessageBox.Show("Received: " + lRet.ToString()); FileIOHelper.DeleteDir(AppSettings.XXPDBFolder); Directory.CreateDirectory(AppSettings.XXPDBFolder); ZipHelper.UnZip(SavePath, AppSettings.XXPDBFolder); this.InitFromDB(); } this.commHandler.DisposeTransFileHelper(); }); MessageBox.Show(str); if (this.commHandler.RequestStartTransDB(df.IP) != ConstHelper.BC_OK) { } } LeveldbOperator.CloseDB(); ResponseBlock BkInfo = this.commHandler.RequestNewBlockInfo(this.bkHandler.GetLastBlock()); if (BkInfo.BlockResult == BlockResultType.Lower) { string sRet = this.commHandler.GetNewBlocks(BkInfo.IP, this.bkHandler.GetLastBlock()); } LogHelper.WriteMethodLog(false); }
public string ReserchNodes() { LogHelper.WriteMethodLog(true); AppSettings.SeedNodes = AppConfigHelper.GetConfigValByKey("SeedNodes"); var lstSeeds = (from x in AppSettings.SeedNodes.Split('|') where x != "" select x).ToList(); //foreach (var item in lstSeeds) //{ // if (item != OSHelper.GetLocalIP() && item != "127.0.0.1") // this.RequestHandshake(item); //} ParallelOptions po = new ParallelOptions(); po.MaxDegreeOfParallelism = 4; Parallel.ForEach(lstSeeds, po, (item) => { if (item != OSHelper.GetLocalIP() && item != "127.0.0.1") { this.RequestHandshake(item); } }); if (this.dicAddressesPool.Count == 0) { return("Connect to XXPCoin Net failed"); } HashSet <string> hsNew = new HashSet <string>(); Dictionary <string, int> dicAddPool = new Dictionary <string, int>(); dicAddPool = this.dicAddressesPool; foreach (var item in dicAddPool) { List <string> lstAddress = this.RequestMoreNodes(item.Key); foreach (var Adds in lstAddress) { if (Adds != OSHelper.GetLocalIP() && !this.dicAddressesPool.ContainsKey(Adds)) { if (!hsNew.Contains(Adds)) { hsNew.Add(Adds); } } } } foreach (var item in hsNew) { if (this.RequestHandshake(item)) { this.Add2AddressPool(item); } } LogHelper.WriteMethodLog(false); return(ConstHelper.BC_OK); }