diff --git a/protocol/base/base.go b/protocol/base/base.go index 3b283d6..a3e0358 100644 --- a/protocol/base/base.go +++ b/protocol/base/base.go @@ -9,6 +9,8 @@ import ( type IncomingMessage interface { HandleMessage(node interfaces.Node, peer net.Peer, verifyId bool) error SetIncomingMessage(msg IncomingMessage) + Self() IncomingMessage + SetSelf(self IncomingMessage) msgpack.CustomDecoder } diff --git a/protocol/base/incoming_message.go b/protocol/base/incoming_message.go index 5378040..b4a7489 100644 --- a/protocol/base/incoming_message.go +++ b/protocol/base/incoming_message.go @@ -20,6 +20,15 @@ type IncomingMessageImpl struct { data msgpack.RawMessage original []byte 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 { @@ -97,7 +106,7 @@ func NewIncomingMessageTyped(kind types.ProtocolMethod, data msgpack.RawMessage) func (i *IncomingMessageImpl) DecodeMsgpack(dec *msgpack.Decoder) error { if i.known { - if msgTyped, ok := interface{}(i).(IncomingMessageTyped); ok { + if msgTyped, ok := interface{}(i.Self()).(IncomingMessageTyped); ok { return msgTyped.DecodeMessage(dec) } return fmt.Errorf("type assertion to IncomingMessageTyped failed") diff --git a/service/p2p.go b/service/p2p.go index eb51145..44f32e4 100644 --- a/service/p2p.go +++ b/service/p2p.go @@ -2,6 +2,7 @@ package service import ( "errors" + "fmt" "git.lumeweb.com/LumeWeb/libs5-go/ed25519" "git.lumeweb.com/LumeWeb/libs5-go/encoding" "git.lumeweb.com/LumeWeb/libs5-go/interfaces" @@ -15,6 +16,7 @@ import ( bolt "go.etcd.io/bbolt" "go.uber.org/zap" "net/url" + "reflect" "sort" "time" ) @@ -247,9 +249,11 @@ func (p *P2PImpl) OnNewPeerListen(peer net.Peer, verifyId bool) { handler, ok := protocol.GetMessageType(imsg.GetKind()) if ok { + imsg.SetOriginal(message) handler.SetIncomingMessage(imsg) - + handler.SetSelf(handler) + fmt.Println(reflect.TypeOf(handler)) err := msgpack.Unmarshal(imsg.Data(), handler) if err != nil { return err