github.com/enbility/spine-go@v0.7.0/spine/nodemanagement.go (about) 1 package spine 2 3 import ( 4 "fmt" 5 6 "github.com/enbility/spine-go/api" 7 "github.com/enbility/spine-go/model" 8 "github.com/enbility/spine-go/util" 9 ) 10 11 const NodeManagementFeatureId uint = 0 12 13 func NodeManagementAddress(deviceAddress *model.AddressDeviceType) *model.FeatureAddressType { 14 return &model.FeatureAddressType{ 15 Entity: []model.AddressEntityType{0}, 16 Feature: util.Ptr(model.AddressFeatureType(NodeManagementFeatureId)), 17 Device: deviceAddress, 18 } 19 } 20 21 var _ api.NodeManagementInterface = (*NodeManagement)(nil) 22 23 type NodeManagement struct { 24 *FeatureLocal 25 entity api.EntityLocalInterface 26 } 27 28 func NewNodeManagement(id uint, entity api.EntityLocalInterface) *NodeManagement { 29 f := &NodeManagement{ 30 FeatureLocal: NewFeatureLocal( 31 id, entity, 32 model.FeatureTypeTypeNodeManagement, 33 model.RoleTypeSpecial), 34 entity: entity, 35 } 36 37 f.AddFunctionType(model.FunctionTypeNodeManagementDetailedDiscoveryData, true, false) 38 f.AddFunctionType(model.FunctionTypeNodeManagementUseCaseData, true, false) 39 f.AddFunctionType(model.FunctionTypeNodeManagementSubscriptionData, true, false) 40 f.AddFunctionType(model.FunctionTypeNodeManagementSubscriptionRequestCall, false, false) 41 f.AddFunctionType(model.FunctionTypeNodeManagementSubscriptionDeleteCall, false, false) 42 f.AddFunctionType(model.FunctionTypeNodeManagementBindingData, true, false) 43 f.AddFunctionType(model.FunctionTypeNodeManagementBindingRequestCall, false, false) 44 f.AddFunctionType(model.FunctionTypeNodeManagementBindingDeleteCall, false, false) 45 if f.Device().FeatureSet() != nil && *f.Device().FeatureSet() != model.NetworkManagementFeatureSetTypeSimple { 46 f.AddFunctionType(model.FunctionTypeNodeManagementDestinationListData, true, false) 47 } 48 49 return f 50 } 51 52 func (r *NodeManagement) Device() api.DeviceLocalInterface { 53 return r.entity.Device() 54 } 55 56 func (r *NodeManagement) HandleMessage(message *api.Message) *model.ErrorType { 57 switch { 58 case message.Cmd.ResultData != nil: 59 if err := r.processResult(message); err != nil { 60 return err 61 } 62 63 case message.Cmd.NodeManagementDetailedDiscoveryData != nil: 64 if err := r.handleMsgDetailedDiscoveryData(message, message.Cmd.NodeManagementDetailedDiscoveryData); err != nil { 65 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 66 } 67 68 case message.Cmd.NodeManagementSubscriptionRequestCall != nil: 69 if err := r.handleMsgSubscriptionRequestCall(message, message.Cmd.NodeManagementSubscriptionRequestCall); err != nil { 70 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 71 } 72 73 case message.Cmd.NodeManagementSubscriptionDeleteCall != nil: 74 if err := r.handleMsgSubscriptionDeleteCall(message, message.Cmd.NodeManagementSubscriptionDeleteCall); err != nil { 75 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 76 } 77 78 case message.Cmd.NodeManagementSubscriptionData != nil: 79 if err := r.handleMsgSubscriptionData(message); err != nil { 80 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 81 } 82 83 case message.Cmd.NodeManagementBindingRequestCall != nil: 84 if err := r.handleMsgBindingRequestCall(message, message.Cmd.NodeManagementBindingRequestCall); err != nil { 85 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 86 } 87 88 case message.Cmd.NodeManagementBindingDeleteCall != nil: 89 if err := r.handleMsgBindingDeleteCall(message, message.Cmd.NodeManagementBindingDeleteCall); err != nil { 90 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 91 } 92 93 case message.Cmd.NodeManagementBindingData != nil: 94 if err := r.handleMsgBindingData(message); err != nil { 95 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 96 } 97 98 case message.Cmd.NodeManagementUseCaseData != nil: 99 if err := r.handleMsgUseCaseData(message, message.Cmd.NodeManagementUseCaseData); err != nil { 100 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 101 } 102 103 case message.Cmd.NodeManagementDestinationListData != nil: 104 if err := r.handleMsgDestinationListData(message, message.Cmd.NodeManagementDestinationListData); err != nil { 105 return model.NewErrorType(model.ErrorNumberTypeGeneralError, err.Error()) 106 } 107 108 default: 109 return model.NewErrorType(model.ErrorNumberTypeCommandNotSupported, fmt.Sprintf("nodemanagement.Handle: Cmd data not implemented: %s", message.Cmd.DataName())) 110 } 111 112 return nil 113 }