示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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");
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }