github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/cluster/node.go (about) 1 package cluster 2 3 import ( 4 model "github.com/cloudreve/Cloudreve/v3/models" 5 "github.com/cloudreve/Cloudreve/v3/pkg/aria2/common" 6 "github.com/cloudreve/Cloudreve/v3/pkg/auth" 7 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 8 ) 9 10 type Node interface { 11 // Init a node from database model 12 Init(node *model.Node) 13 14 // Check if given feature is enabled 15 IsFeatureEnabled(feature string) bool 16 17 // Subscribe node status change to a callback function 18 SubscribeStatusChange(callback func(isActive bool, id uint)) 19 20 // Ping the node 21 Ping(req *serializer.NodePingReq) (*serializer.NodePingResp, error) 22 23 // Returns if the node is active 24 IsActive() bool 25 26 // Get instances for aria2 calls 27 GetAria2Instance() common.Aria2 28 29 // Returns unique id of this node 30 ID() uint 31 32 // Kill node and recycle resources 33 Kill() 34 35 // Returns if current node is master node 36 IsMater() bool 37 38 // Get auth instance used to check RPC call from slave to master 39 MasterAuthInstance() auth.Auth 40 41 // Get auth instance used to check RPC call from master to slave 42 SlaveAuthInstance() auth.Auth 43 44 // Get node DB model 45 DBModel() *model.Node 46 } 47 48 // Create new node from DB model 49 func NewNodeFromDBModel(node *model.Node) Node { 50 switch node.Type { 51 case model.SlaveNodeType: 52 slave := &SlaveNode{} 53 slave.Init(node) 54 return slave 55 default: 56 master := &MasterNode{} 57 master.Init(node) 58 return master 59 } 60 }