웹소켓을 활용한 블록체인

969·2021년 12월 29일
//p2pServer.js
const WebSocket = require("ws")
const p2p_port = process.env.P2P_PORT || 6001



function initP2PServer(){ //p2p함수 초기화
	const server = WebSocket.server({port:p2p_port})
	server.on("connection",(ws)=>{ initConnection(ws);})
	console.log("Listening webSocket port : " +p2p_port)
	init(ws)
}

let sockets = []

function initConnection(ws){//연결되는애들만 푸시
	sockets.push(ws)
}
function getSockets(){
	return sockets;
}
function write(ws, message){
	ws.send(JSON.stringify(message))
}
function broadcast(message){
	sockets.forEach(
		// function (socket){
		// 	write(socket, message);
		// }
		(socket)=>{
			write(socket, message);
		}
	)
}
function connectToPeers(newPeers){
	newPeers.forEach(
		(peer)=>{
			const ws= new WebSocket(peer)
			ws.on("open",()=>{initConnection(ws);})
			ws.on("error", ()=>{console.log("connection Failed!")})
		}
	)

}
module.exports={
	connectToPeers,
	initP2PServer,
	getSockets,
	broadcast

}
//httpServer.js
const express = require("express")
const bodyParser = require("body-parser")
const { getVersion, getBlocks } = require("./chainedBlock.js")
const { getBlocks, addBlock, nextBlock } = require("./checkVaildBlock")
const {connectToPeers} = require("./p2pServer.js")

const http_port = process.env.HTTP_PORT || 3001

function initHttpServer(){
	        const app = express()
	        app.use(bodyParser.json())

			//curl -H "Content-type:application/json" 
			// --data "{\"data\" : [\"ws://localhost:6002\", \"ws://localhost:6003\"]}"
			app.post("/addPeers", (req,res)=>{
				const data = req.body.data || []
				connectToPeers(data);
				res.send(data);
				
			})

	        app.get("/blocks", (req,res)=>{
			            res.send(getBlocks())
			        })

	        app.post("/mineBlock", (req, res)=>{
			                const data = req.body.data || []
					console.log(data)
			                const block = nextBlock(data)
			                addBlock(block)

			                res.send(block)
			        })

	        app.get("/version", (req,res) =>{
			                res.send(getVersion())
			        })
	        app.post("/stop", (req, res)=>{
			                res.send({"msg":"Stop Server!"})
			                process.exit()

			        })

	        app.listen(http_port, ()=>{
			                console.log("Listening Http Port : " + http_port)
			        })


}
initHttpServer();
curl -H "Content-type:application/json"  --data "{\"data\" : [\"ws://localhost:6002\", \"ws://localhost:6003\"]}" http://localhost:3001/addPeers

0개의 댓글