fix: need to store a reference to the handler to itself so we can access it by the proper type in a parent method
This commit is contained in:
parent
a6389eb738
commit
a9fb6aedb9
|
@ -9,6 +9,8 @@ import (
|
||||||
type IncomingMessage interface {
|
type IncomingMessage interface {
|
||||||
HandleMessage(node interfaces.Node, peer net.Peer, verifyId bool) error
|
HandleMessage(node interfaces.Node, peer net.Peer, verifyId bool) error
|
||||||
SetIncomingMessage(msg IncomingMessage)
|
SetIncomingMessage(msg IncomingMessage)
|
||||||
|
Self() IncomingMessage
|
||||||
|
SetSelf(self IncomingMessage)
|
||||||
msgpack.CustomDecoder
|
msgpack.CustomDecoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,15 @@ type IncomingMessageImpl struct {
|
||||||
data msgpack.RawMessage
|
data msgpack.RawMessage
|
||||||
original []byte
|
original []byte
|
||||||
known bool
|
known bool
|
||||||
|
self IncomingMessage
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IncomingMessageImpl) Self() IncomingMessage {
|
||||||
|
return i.self
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IncomingMessageImpl) SetSelf(self IncomingMessage) {
|
||||||
|
i.self = self
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *IncomingMessageImpl) DecodeMessage(dec *msgpack.Decoder) error {
|
func (i *IncomingMessageImpl) DecodeMessage(dec *msgpack.Decoder) error {
|
||||||
|
@ -97,7 +106,7 @@ func NewIncomingMessageTyped(kind types.ProtocolMethod, data msgpack.RawMessage)
|
||||||
|
|
||||||
func (i *IncomingMessageImpl) DecodeMsgpack(dec *msgpack.Decoder) error {
|
func (i *IncomingMessageImpl) DecodeMsgpack(dec *msgpack.Decoder) error {
|
||||||
if i.known {
|
if i.known {
|
||||||
if msgTyped, ok := interface{}(i).(IncomingMessageTyped); ok {
|
if msgTyped, ok := interface{}(i.Self()).(IncomingMessageTyped); ok {
|
||||||
return msgTyped.DecodeMessage(dec)
|
return msgTyped.DecodeMessage(dec)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("type assertion to IncomingMessageTyped failed")
|
return fmt.Errorf("type assertion to IncomingMessageTyped failed")
|
||||||
|
|
|
@ -2,6 +2,7 @@ package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"git.lumeweb.com/LumeWeb/libs5-go/ed25519"
|
"git.lumeweb.com/LumeWeb/libs5-go/ed25519"
|
||||||
"git.lumeweb.com/LumeWeb/libs5-go/encoding"
|
"git.lumeweb.com/LumeWeb/libs5-go/encoding"
|
||||||
"git.lumeweb.com/LumeWeb/libs5-go/interfaces"
|
"git.lumeweb.com/LumeWeb/libs5-go/interfaces"
|
||||||
|
@ -15,6 +16,7 @@ import (
|
||||||
bolt "go.etcd.io/bbolt"
|
bolt "go.etcd.io/bbolt"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -247,9 +249,11 @@ func (p *P2PImpl) OnNewPeerListen(peer net.Peer, verifyId bool) {
|
||||||
handler, ok := protocol.GetMessageType(imsg.GetKind())
|
handler, ok := protocol.GetMessageType(imsg.GetKind())
|
||||||
|
|
||||||
if ok {
|
if ok {
|
||||||
|
|
||||||
imsg.SetOriginal(message)
|
imsg.SetOriginal(message)
|
||||||
handler.SetIncomingMessage(imsg)
|
handler.SetIncomingMessage(imsg)
|
||||||
|
handler.SetSelf(handler)
|
||||||
|
fmt.Println(reflect.TypeOf(handler))
|
||||||
err := msgpack.Unmarshal(imsg.Data(), handler)
|
err := msgpack.Unmarshal(imsg.Data(), handler)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue