arnaucube
arnaucube/blockchainIDsystemPublic Self-hosted repository
blockchainIDsystem/peer/connections.go
peer/connections.goRaw
 1package main
 2
 3import (
 4	"bufio"
 5	"fmt"
 6	"log"
 7	"net"
 8)
 9
10func acceptPeers(peer Peer) {
11	fmt.Println("accepting peers at: " + peer.Port)
12	l, err := net.Listen("tcp", peer.IP+":"+peer.Port)
13	if err != nil {
14		log.Println("Error accepting peers. Listening port: " + peer.Port)
15		running = false
16	}
17	for running {
18		conn, err := l.Accept()
19		if err != nil {
20			log.Println("Error accepting peers. Error accepting connection")
21			running = false
22		}
23		var newPeer Peer
24		newPeer.IP = getIPFromConn(conn)
25		newPeer.Port = getPortFromConn(conn)
26		newPeer.Conn = conn
27		/*
28			//ask to the peer, for the peer ID
29			resp, err := http.Get("http://" + newPeer.IP + ":" + newPeer.Port)
30			check(err)
31			color.Red("-----")
32			fmt.Println(resp)
33			//newPeer.ID = resp
34		*/
35		peersList.Peers = append(peersList.Peers, newPeer)
36		go handleConn(conn, newPeer)
37	}
38}
39func connectToPeer(peer Peer) {
40	conn, err := net.Dial("tcp", peer.IP+":"+peer.Port)
41	if err != nil {
42		log.Println("Error connecting to: " + peer.IP + ":" + peer.Port)
43		return
44	}
45	peer.Conn = conn
46	peersList.Peers = append(peersList.Peers, peer)
47	go handleConn(conn, peer)
48}
49func handleConn(conn net.Conn, connPeer Peer) {
50	connRunning := true
51	log.Println("handling conn: " + conn.RemoteAddr().String())
52	//reply to the conn, send the peerList
53	var msg Msg
54	msg = msg.construct("PeersList", "here my peersList", peersList)
55	msgB := msg.toBytes()
56	_, err := conn.Write(msgB)
57	check(err)
58
59	for connRunning {
60		/*
61			buffer := make([]byte, 1024)
62			bytesRead, err := conn.Read(buffer)
63		*/
64		newmsg, err := bufio.NewReader(conn).ReadString('\n')
65		if err != nil {
66			log.Println(err)
67			connRunning = false
68		} else {
69			/*
70				fmt.Println(buffer)
71				fmt.Println(bytesRead)
72			*/
73			var msg Msg
74			//color.Blue(string(buffer[0:bytesRead]))
75			//msg = msg.createFromBytes([]byte(string(buffer[0:bytesRead])))
76			msg = msg.createFromBytes([]byte(newmsg))
77			messageHandler(connPeer, msg)
78		}
79	}
80	//TODO add that if the peer closed is the p2p server, show a warning message at the peer
81	log.Println("Peer: " + conn.RemoteAddr().String() + " connection closed")
82	conn.Close()
83	//TODO delete the peer from the peersList
84}