blockchainIDsystem/peer/connections.go
peer/connections.goRaw
1package main
2
3import (
4 "encoding/json"
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 listPeers = append(listPeers, newPeer)
30 go handleConn(conn)
31 }
32}
33func connectToPeer(peer Peer) {
34 conn, err := net.Dial("tcp", peer.IP+":"+peer.Port)
35 if err != nil {
36 log.Println("Error connecting to: " + peer.IP + ":" + peer.Port)
37 return
38 }
39 peer.Conn = conn
40 listPeers = append(listPeers, peer)
41 go handleConn(conn)
42}
43func handleConn(conn net.Conn) {
44 connRunning := true
45 log.Println("handling conn: " + conn.RemoteAddr().String())
46 //reply to the conn
47 msgB := newMsgBytes("Hi", "New Peer connected")
48 _, err := conn.Write(msgB)
49 if err != nil {
50 check(err)
51 }
52
53 buffer := make([]byte, 1024)
54 for connRunning {
55 bytesRead, err := conn.Read(buffer)
56 if err != nil {
57 log.Println(err)
58 connRunning = false
59 } else {
60 s := string(buffer[0:bytesRead])
61 var msg Msg
62 err := json.Unmarshal([]byte(s), &msg)
63 check(err)
64 log.Println("[New msg] [Title]: " + msg.Type + " [Content]: " + msg.Content)
65 color.Green(msg.Content)
66 }
67 }
68 //TODO add that if the peer closed is the p2p server, show a warning message at the peer
69 log.Println("Peer: " + conn.RemoteAddr().String() + " connection closed")
70 conn.Close()
71}