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		peersList.Peers = append(peersList.Peers, newPeer)
28		go handleConn(conn)
29	}
30}
31func connectToPeer(peer Peer) {
32	conn, err := net.Dial("tcp", peer.IP+":"+peer.Port)
33	if err != nil {
34		log.Println("Error connecting to: " + peer.IP + ":" + peer.Port)
35		return
36	}
37	peer.Conn = conn
38	peersList.Peers = append(peersList.Peers, peer)
39	go handleConn(conn)
40}
41func handleConn(conn net.Conn) {
42	connRunning := true
43	log.Println("handling conn: " + conn.RemoteAddr().String())
44	//reply to the conn, send the peerList
45	var msg Msg
46	msg = msg.construct("PeersList", "here my peersList", peersList)
47	msgB := msg.toBytes()
48	_, err := conn.Write(msgB)
49	check(err)
50
51	for connRunning {
52		/*
53			buffer := make([]byte, 1024)
54			bytesRead, err := conn.Read(buffer)
55		*/
56		newmsg, err := bufio.NewReader(conn).ReadString('\n')
57		if err != nil {
58			log.Println(err)
59			connRunning = false
60		} else {
61			/*
62				fmt.Println(buffer)
63				fmt.Println(bytesRead)
64			*/
65			var msg Msg
66			//color.Blue(string(buffer[0:bytesRead]))
67			//msg = msg.createFromBytes([]byte(string(buffer[0:bytesRead])))
68			msg = msg.createFromBytes([]byte(newmsg))
69			messageHandler(conn, msg)
70		}
71	}
72	//TODO add that if the peer closed is the p2p server, show a warning message at the peer
73	log.Println("Peer: " + conn.RemoteAddr().String() + " connection closed")
74	conn.Close()
75}