Beispiel #1
0
        /// <summary>
        /// All incoming messages from other peers are passed to this function for processing
        /// </summary>
        /// <param name="responseData"></param>
        private void ProcessInboundP2PCommand(P2Pmessage responseData)
        {
            Console.WriteLine($"Processing {responseData.Command.ToString()} command");

            switch (responseData.Command)
            {
            case P2Pcommand.GetBlockChain:

                //todo: get chain from {MyNode} and return to response peer

                SendMesage(new Connection(System.Net.IPAddress.Parse(responseData.ResponsePeerIp), responseData.ResponsePeerPort), new P2Pmessage()
                {
                    Command          = P2Pcommand.GetBlockChainResponse,
                    ResponseRequired = false,
                    Data             = MyNode.GetBlockChain()
                });

                break;

            case P2Pcommand.GetBlockChainResponse:

                MyNode.SetBlockChain((List <Block>)responseData.Data);

                break;

            case P2Pcommand.PutBlock:

                MyNode.PutBroadcastedBlock((Block)responseData.Data);

                break;
            }
        }
Beispiel #2
0
        private void SendMesage(Connection peer, P2Pmessage message)
        {
            Byte[] data = ObjectToByteArray(message);

            // Get a client stream for reading and writing.
            //  Stream stream = client.GetStream();

            if (peer.ConnectionState != Connection.State.connected)
            {
                peer.Connect();
            }

            NetworkStream stream = peer.RemoteSocket.GetStream();

            // Send the message to the connected TcpServer.
            stream.Write(data, 0, data.Length);
        }