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