コード例 #1
0
        public async Task Actualize()
        {
            IPAddress senpai = IPAddress.Parse("78.139.208.149");
            int       port   = 6879;

            IPEndPoint sen = new IPEndPoint(senpai, port);

            byte[] message;

            if (!window.admin)
            {
                message = Encoding.UTF8.GetBytes("signature");
                message = server.AddOperation(getlogic.request_template, UDPServer.operation_size, message);

                await server.Send(sen, message);
            }


            await blocks.BlockChainActualize();

            window.WriteLine("Actualization started");
            await info.ActualizeSelfSignature();
        }
コード例 #2
0
        private async Task AnswerLogic(byte[] incoming_data, IPEndPoint source)
        {
            try
            {
                TwoBytesArrays TWdata    = new TwoBytesArrays();
                byte[]         data      = new byte[0];
                string         operation = string.Empty;
                string         path      = string.Empty;
                int            size      = 0;
                string         name;

                TWdata    = ByteArrayCut(incoming_data, GetLogic.operation_size);
                operation = BytesToOperation(TWdata.part1);

                window.WriteLine("Got AnswerLogic: " + operation);
                if (TWdata.part2.Length != 0)
                {
                    switch (operation)
                    {
                    case "signature":
                        path = filesystem.FSConfig.root_path + @"\signature";
                        window.WriteLine("Writing: " + path + " " + TWdata.part2.Length);
                        await filesystem.AddInfoToFileAsync(path, TWdata.part2, true);

                        await information.ActualizeSelfSignature();

                        break;

                    case "actualblock":
                        if (waitingforactual)
                        {
                            string new_actual = Encoding.UTF8.GetString(TWdata.part2);
                            path = filesystem.FSConfig.db_blocks_path + @"\actualblock";

                            window.WriteLine("AnswerLogic.actualblock " + new_actual);
                            data = await blocks.SearchBlock(new_actual);

                            if (data.Length == 0)
                            {
                                waitingfornewactual = true;
                            }
                            else
                            {
                                await filesystem.AddInfoToFileAsync(path, TWdata.part2, true);

                                path = filesystem.FSConfig.db_blocks_path;
                                string current       = Encoding.UTF8.GetString(await filesystem.GetFromFileAsync(path));
                                byte[] current_array = await filesystem.GetFromFileAsync(path + @"\" + current);

                                byte[] new_array = await filesystem.GetFromFileAsync(path + @"\" + new_actual);

                                Block current_block = new Block();
                                Block new_block     = new Block();

                                current_block = blocks.BlockDeSerialize(current_array);
                                new_block     = blocks.BlockDeSerialize(new_array);

                                if (current_block.time < new_block.time)
                                {
                                    await blocks.ActualBlockSet(new_actual);
                                }
                            }
                            waitingforactual = false;
                        }
                        break;

                    case "block":
                        //window.WriteLine("Got AnswerLogic block");

                        size = Convert.ToInt32(Encoding.UTF8.GetString(TWdata.part2));
                        window.WriteLine("getting block from: " + source.ToString());
                        data = await filetransfering.TcpDataGet(source, size);

                        window.WriteLine("Block got");
                        name = blocks.GetBlockName(data);

                        if (name != string.Empty)
                        {
                            path = filesystem.FSConfig.db_blocks_path + @"\" + name;
                            window.WriteLine("new block: " + path);
                            await filesystem.AddInfoToFileAsync(path, data, true);

                            if (waitingfornewactual)
                            {
                                waitingfornewactual = false;
                                await blocks.ActualBlockSet(name);
                            }
                            else
                            {
                                await blocks.BlockChainActualize();
                            }
                        }

                        if (name.Length != 0)
                        {
                            window.WriteLine("block got: " + name);
                        }
                        else
                        {
                            window.WriteLine("wrong block");
                        }
                        break;

                    case "newblock":
                        //window.WriteLine("Got AnswerLogic block");

                        size = Convert.ToInt32(Encoding.UTF8.GetString(TWdata.part2));
                        window.WriteLine("getting newblock from: " + source.ToString());
                        data = await filetransfering.TcpDataGet(source, size);

                        window.WriteLine("newBlock got");
                        name = blocks.GetBlockName(data);

                        if (name != string.Empty)
                        {
                            path = filesystem.FSConfig.db_blocks_path + @"\" + name;
                            window.WriteLine("new block: " + path);
                            await filesystem.AddInfoToFileAsync(path, data, true);

                            await blocks.ActualBlockSet(name);
                        }
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                window.WriteLine(ex.ToString());
            }
        }