Skip to content

Commit

Permalink
modified message/node relation
Browse files Browse the repository at this point in the history
  • Loading branch information
FerroO2000 committed Apr 13, 2024
1 parent 8abc838 commit dde16be
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 30 deletions.
42 changes: 15 additions & 27 deletions message.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,10 @@ const (

// Message is the representation of data sent by a node thought the bus.
// It holds a list of signals that are contained in the message payload.
// A message can be assigned to more then 1 node.
type Message struct {
*attributeEntity

parentNodes *set[EntityID, *Node]
parErrID EntityID
senderNode *Node

signals *set[EntityID, Signal]
signalNames *set[string, EntityID]
Expand All @@ -78,8 +76,7 @@ func NewMessage(name string, sizeByte int) *Message {
return &Message{
attributeEntity: newAttributeEntity(name, AttributeRefKindMessage),

parentNodes: newSet[EntityID, *Node]("parent node"),
parErrID: "",
senderNode: nil,

signals: newSet[EntityID, Signal]("signal"),
signalNames: newSet[string, EntityID]("signal name"),
Expand Down Expand Up @@ -111,23 +108,15 @@ func (m *Message) resetID() {
m.id = 0
}

func (m *Message) hasSenderNode() bool {
return m.senderNode != nil
}

func (m *Message) errorf(err error) error {
msgErr := fmt.Errorf(`message "%s": %w`, m.name, err)

if m.parentNodes.size() > 0 {
if m.parErrID != "" {
parNode, err := m.parentNodes.getValue(m.parErrID)
if err != nil {
panic(err)
}

m.parErrID = ""
return parNode.errorf(msgErr)
}

return m.parentNodes.getValues()[0].errorf(msgErr)
if m.hasSenderNode() {
return m.senderNode.errorf(msgErr)
}

return msgErr
}

Expand Down Expand Up @@ -245,23 +234,22 @@ func (m *Message) UpdateName(newName string) error {
return nil
}

for _, tmpNode := range m.parentNodes.entries() {
if err := tmpNode.messageNames.verifyKey(newName); err != nil {
m.parErrID = tmpNode.entityID
if m.hasSenderNode() {
if err := m.senderNode.messageNames.verifyKey(newName); err != nil {
return m.errorf(fmt.Errorf(`cannot update name to "%s" : %w`, newName, err))
}

tmpNode.modifyMessageName(m.entityID, newName)
m.senderNode.modifyMessageName(m.entityID, newName)
}

m.name = newName

return nil
}

// ParentNodes returns a slice of nodes that send the [Message].
func (m *Message) ParentNodes() []*Node {
return m.parentNodes.getValues()
// SenderNode returns the [Node] that sends the [Message].
// It returns nil if the message is not added to a node.
func (m *Message) SenderNode() *Node {
return m.senderNode
}

// AppendSignal appends a [Signal] to the last position of the [Message] payload.
Expand Down
6 changes: 3 additions & 3 deletions node.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ func (n *Node) AddMessage(message *Message) error {
n.messageNames.add(message.name, message.entityID)
n.messageIDs.add(message.id, message.entityID)

message.parentNodes.add(n.entityID, n)
message.senderNode = n

return nil
}
Expand All @@ -161,7 +161,7 @@ func (n *Node) RemoveMessage(messageEntityID EntityID) error {
return n.errorf(fmt.Errorf(`cannot remove message with entity id "%s" : %w`, messageEntityID, err))
}

msg.parentNodes.remove(n.entityID)
msg.senderNode = nil
msg.resetID()

n.messages.remove(messageEntityID)
Expand All @@ -179,7 +179,7 @@ func (n *Node) RemoveMessage(messageEntityID EntityID) error {
func (n *Node) RemoveAllMessages() {
for _, tmpMsg := range n.messages.entries() {
tmpMsg.resetID()
tmpMsg.parentNodes.remove(n.entityID)
tmpMsg.senderNode = nil
}

n.messages.clear()
Expand Down

0 comments on commit dde16be

Please sign in to comment.