func NewRouter(key *utils.PrivateKey, logger *log.Logger, config utils.Config) (*Router, error) { exit := make(chan int) listener, err := getOpenPortConn(config) if err != nil { return nil, err } logger.Info("Node ID: %s", key.Digest().String()) logger.Info("Node Socket: %v", listener.Addr()) ns := utils.GlobalNamespace id := utils.NewNodeID(ns, key.Digest()) r := Router{ id: id, listener: listener, key: key, sessions: make(map[utils.NodeID]*session), mainDht: dht.NewDHT(10, id, id, listener.RawConn, logger), groupDht: make(map[utils.NodeID]*dht.DHT), receivedPackets: make(map[[20]byte]int), logger: logger, recv: make(chan Message, 100), send: make(chan internal.Packet, 100), exit: exit, } go r.run() return &r, nil }
// NewClient generates a Client with the given PrivateKey. func NewClient(key *utils.PrivateKey, config utils.Config) (*Client, error) { logger := log.NewLogger() r, err := router.NewRouter(key, logger, config) if err != nil { return nil, err } c := &Client{ router: r, readch: make(chan router.Message), mbuf: newMessageBuffer(128), id: utils.NewNodeID(utils.GlobalNamespace, key.Digest()), config: config, Logger: logger, } return c, nil }