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}