commit inicial do projeto
This commit is contained in:
39
internal/consensus/network.go
Normal file
39
internal/consensus/network.go
Normal file
@ -0,0 +1,39 @@
|
||||
package consensus
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// MessageHandler é a função chamada quando uma mensagem é recebida.
|
||||
type MessageHandler func(msg ConsensusMessage)
|
||||
|
||||
// Transport simula o envio e recebimento de mensagens de consenso entre nós.
|
||||
type Transport struct {
|
||||
handlersMu sync.RWMutex
|
||||
handlers map[MessageType][]MessageHandler
|
||||
}
|
||||
|
||||
// NewTransport cria um novo transporte de mensagens de consenso.
|
||||
func NewTransport() *Transport {
|
||||
return &Transport{
|
||||
handlers: make(map[MessageType][]MessageHandler),
|
||||
}
|
||||
}
|
||||
|
||||
// Register adiciona um handler para um tipo de mensagem.
|
||||
func (t *Transport) Register(msgType MessageType, handler MessageHandler) {
|
||||
t.handlersMu.Lock()
|
||||
defer t.handlersMu.Unlock()
|
||||
t.handlers[msgType] = append(t.handlers[msgType], handler)
|
||||
}
|
||||
|
||||
// Broadcast envia uma mensagem para todos os handlers registrados daquele tipo.
|
||||
func (t *Transport) Broadcast(msg ConsensusMessage) {
|
||||
t.handlersMu.RLock()
|
||||
handlers := t.handlers[msg.Type()]
|
||||
t.handlersMu.RUnlock()
|
||||
|
||||
for _, h := range handlers {
|
||||
go h(msg) // Envia de forma assíncrona
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user