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}