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 = msg.construct("PeersList", "here my outcomingPeersList", outcomingPeersList)
61 msgB := msg.toBytes()
62 _, err := conn.Write(msgB)
63 check(err)
64
65 for connRunning {
66 /*
67 buffer := make([]byte, 1024)
68 bytesRead, err := conn.Read(buffer)
69 */
70 newmsg, err := bufio.NewReader(conn).ReadString('\n')
71 if err != nil {
72 log.Println(err)
73 connRunning = false
74 } else {
75 /*
76 fmt.Println(buffer)
77 fmt.Println(bytesRead)
78 */
79 var msg Msg
80 //color.Blue(string(buffer[0:bytesRead]))
81 //msg = msg.createFromBytes([]byte(string(buffer[0:bytesRead])))
82 msg = msg.createFromBytes([]byte(newmsg))
83 messageHandler(connPeer, msg)
84 }
85 }
86 //TODO add that if the peer closed is the p2p server, show a warning message at the peer
87 log.Println("Peer: " + conn.RemoteAddr().String() + " connection closed")
88 conn.Close()
89 //TODO delete the peer from the outcomingPeersList
90}