Files
core/Peernet.go

70 lines
1.9 KiB
Go

/*
File Name: Peernet.go
Copyright: 2021 Peernet s.r.o.
Author: Peter Kleissner
*/
package core
import (
"github.com/PeernetOfficial/core/search"
)
var userAgent = "Peernet Core/0.1" // must be overwritten by the caller
// Init initializes the client. The config must be loaded first!
// The User Agent must be provided in the form "Application Name/1.0".
func Init(UserAgent string) (backend *Backend) {
if userAgent = UserAgent; userAgent == "" {
return
}
backend = &Backend{}
currentBackend = backend
initFilters()
initPeerID()
initUserBlockchain()
initUserWarehouse()
initKademlia()
initMessageSequence()
initSeedList()
initMulticastIPv6()
initBroadcastIPv4()
initStore()
initNetwork()
var err error
backend.GlobalBlockchainCache = initBlockchainCache(config.BlockchainGlobal, config.CacheMaxBlockSize, config.CacheMaxBlockCount, config.LimitTotalRecords)
if backend.SearchIndex, err = search.InitSearchIndexStore(config.SearchIndex); err != nil {
Filters.LogError("Init", "search index '%s' init: %s", config.SearchIndex, err.Error())
} else {
backend.userBlockchainUpdateSearchIndex()
}
return backend
}
// Connect starts bootstrapping and local peer discovery.
func Connect() {
go bootstrapKademlia()
go bootstrap()
go networks.autoMulticastBroadcast()
go autoPingAll()
go networks.networkChangeMonitor()
go networks.startUPnP()
go autoBucketRefresh()
}
// The Backend represents an instance of a Peernet client to be used by a frontend.
// Global variables and init functions are to be merged.
type Backend struct {
GlobalBlockchainCache *BlockchainCache // Caches blockchains of other peers.
SearchIndex *search.SearchIndexStore // Search index of blockchain records.
}
// This variable is to be replaced later by pointers in structures.
var currentBackend *Backend