fiz: correções da pool
This commit is contained in:
@ -13,8 +13,9 @@ import (
|
||||
)
|
||||
|
||||
type HTTPTransport struct {
|
||||
peers []string
|
||||
handlers map[MessageType]func(ConsensusMessage)
|
||||
peers []string
|
||||
handlers map[MessageType]func(ConsensusMessage)
|
||||
receiveChan chan ConsensusMessage // Canal para enviar mensagens recebidas
|
||||
}
|
||||
|
||||
func NewHTTPTransport() *HTTPTransport {
|
||||
@ -67,32 +68,43 @@ func (t *HTTPTransport) HandleIncoming(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
var msg ConsensusMessage
|
||||
switch base.MsgType {
|
||||
case ProposalType:
|
||||
var msg ProposalMsg
|
||||
_ = json.Unmarshal(bodyBytes, &msg)
|
||||
if h, ok := t.handlers[ProposalType]; ok {
|
||||
h(msg)
|
||||
}
|
||||
msg = &ProposalMsg{}
|
||||
case PrevoteType:
|
||||
var msg PrevoteMsg
|
||||
_ = json.Unmarshal(bodyBytes, &msg)
|
||||
if h, ok := t.handlers[PrevoteType]; ok {
|
||||
h(msg)
|
||||
}
|
||||
msg = &PrevoteMsg{}
|
||||
case PrecommitType:
|
||||
var msg PrecommitMsg
|
||||
_ = json.Unmarshal(bodyBytes, &msg)
|
||||
if h, ok := t.handlers[PrecommitType]; ok {
|
||||
h(msg)
|
||||
}
|
||||
msg = &PrecommitMsg{}
|
||||
default:
|
||||
log.Println("⚠️ Tipo de mensagem desconhecido:", base.MsgType)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(bodyBytes, msg); err != nil {
|
||||
log.Println("❌ Erro ao decodificar mensagem:", err)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
select {
|
||||
case t.receiveChan <- msg:
|
||||
w.WriteHeader(http.StatusOK)
|
||||
log.Printf("✅ Mensagem %s recebida de %s\n", base.MsgType, base.Validator)
|
||||
default:
|
||||
log.Println("⚠️ Canal de mensagens cheio - descartando mensagem")
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
// PingPeer envia um ping para o peer e espera resposta.
|
||||
func (t *HTTPTransport) Receive() <-chan ConsensusMessage {
|
||||
ch := make(chan ConsensusMessage, 100)
|
||||
t.receiveChan = ch // Armazena o canal para uso nos handlers
|
||||
return ch
|
||||
}
|
||||
|
||||
func (t *HTTPTransport) PingPeer(peer string) error {
|
||||
client := http.Client{
|
||||
Timeout: 2 * time.Second,
|
||||
@ -106,4 +118,4 @@ func (t *HTTPTransport) PingPeer(peer string) error {
|
||||
return errors.New("resposta inválida ao ping")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user