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  }