wip
This commit is contained in:
67
peer/peer.go
Normal file
67
peer/peer.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package peer
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
)
|
||||
|
||||
type Peer struct {
|
||||
// Immutable data.
|
||||
ip byte // Last byte of IPv4 address.
|
||||
hubAddr string
|
||||
apiKey string
|
||||
|
||||
encPubKey []byte
|
||||
encPrivKey []byte
|
||||
signPubKey []byte
|
||||
signPrivKey []byte
|
||||
conn *net.UDPConn
|
||||
iface io.ReadWriteCloser
|
||||
|
||||
router *Router
|
||||
}
|
||||
|
||||
func NewPeer(netName, listenIP string, port uint16) (*Peer, error) {
|
||||
conf, err := loadPeerConfig(netName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
peer := &Peer{
|
||||
ip: conf.PeerIP,
|
||||
hubAddr: conf.HubAddress,
|
||||
apiKey: conf.APIKey,
|
||||
encPubKey: conf.EncPubKey,
|
||||
encPrivKey: conf.EncPrivKey,
|
||||
signPubKey: conf.SignPubKey,
|
||||
signPrivKey: conf.SignPrivKey,
|
||||
}
|
||||
|
||||
peer.router = NewRouter(conf)
|
||||
|
||||
port = determinePort(conf.Port, port)
|
||||
|
||||
conn, err := openUDPConn(listenIP, port)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
peer.conn = conn
|
||||
|
||||
peer.iface, err = openInterface(conf.Network, conf.PeerIP, netName)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return peer, nil
|
||||
}
|
||||
|
||||
func (p *Peer) Run() {
|
||||
go p.netReader()
|
||||
p.ifReader()
|
||||
}
|
||||
Reference in New Issue
Block a user