mirror of
https://github.com/logos-messaging/logos-messaging-go.git
synced 2026-05-05 19:09:26 +00:00
feat: 23/WAKU2-TOPICS (#146)
This commit is contained in:
parent
9f504b1150
commit
6d04308716
@ -58,7 +58,7 @@ Examples of usage of go-waku as a library can be found in the examples folder. T
|
|||||||
|[18/WAKU2-SWAP](https://rfc.vac.dev/spec/18)||
|
|[18/WAKU2-SWAP](https://rfc.vac.dev/spec/18)||
|
||||||
|[21/WAKU2-FTSTORE](https://rfc.vac.dev/spec/21)|✔|
|
|[21/WAKU2-FTSTORE](https://rfc.vac.dev/spec/21)|✔|
|
||||||
|[22/TOY-CHAT](https://rfc.vac.dev/spec/22)|✔|
|
|[22/TOY-CHAT](https://rfc.vac.dev/spec/22)|✔|
|
||||||
|[23/TOPICS](https://rfc.vac.dev/spec/22)|(implemented in status-go)|
|
|[23/TOPICS](https://rfc.vac.dev/spec/22)|✔|
|
||||||
|[25/LIBP2P-DNS-DISCOVERY](https://rfc.vac.dev/spec/25)|🚧|
|
|[25/LIBP2P-DNS-DISCOVERY](https://rfc.vac.dev/spec/25)|🚧|
|
||||||
|[26/WAKU2-PAYLOAD](https://rfc.vac.dev/spec/26)|✔|
|
|[26/WAKU2-PAYLOAD](https://rfc.vac.dev/spec/26)|✔|
|
||||||
|[27/WAKU2-PEERS](https://rfc.vac.dev/spec/27)|✔|
|
|[27/WAKU2-PEERS](https://rfc.vac.dev/spec/27)|✔|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ module basic2
|
|||||||
|
|
||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
// replace github.com/status-im/go-waku => ../..
|
replace github.com/status-im/go-waku => ../..
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/ethereum/go-ethereum v1.10.9
|
github.com/ethereum/go-ethereum v1.10.9
|
||||||
|
|||||||
@ -353,6 +353,7 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
|
|||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
|
github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
|
||||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||||
@ -1053,8 +1054,6 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
|
|||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||||
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
|
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
|
||||||
github.com/status-im/go-waku v0.0.0-20211101194039-94e8b9cf86fc h1:u410QB8K5iFXaI4FYh2JR7A2oCHlXD4CLnI5/gJei9Q=
|
|
||||||
github.com/status-im/go-waku v0.0.0-20211101194039-94e8b9cf86fc/go.mod h1:A0lI3uZYLKrXiviVkwGgBdT8b9HLcW3U/xUcE/4665k=
|
|
||||||
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432 h1:cbNFU38iimo9fY4B7CdF/fvIF6tNPJIZjBbpfmW2EY4=
|
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432 h1:cbNFU38iimo9fY4B7CdF/fvIF6tNPJIZjBbpfmW2EY4=
|
||||||
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432/go.mod h1:A8t3i0CUGtXCA0aiLsP7iyikmk/KaD/2XVvNJqGCU20=
|
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432/go.mod h1:A8t3i0CUGtXCA0aiLsP7iyikmk/KaD/2XVvNJqGCU20=
|
||||||
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
|
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
"github.com/status-im/go-waku/waku/v2/node"
|
"github.com/status-im/go-waku/waku/v2/node"
|
||||||
|
"github.com/status-im/go-waku/waku/v2/protocol"
|
||||||
"github.com/status-im/go-waku/waku/v2/protocol/pb"
|
"github.com/status-im/go-waku/waku/v2/protocol/pb"
|
||||||
"github.com/status-im/go-waku/waku/v2/utils"
|
"github.com/status-im/go-waku/waku/v2/utils"
|
||||||
)
|
)
|
||||||
@ -80,7 +81,8 @@ func randomHex(n int) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func write(ctx context.Context, wakuNode *node.WakuNode, msgContent string) {
|
func write(ctx context.Context, wakuNode *node.WakuNode, msgContent string) {
|
||||||
var contentTopic string = "test"
|
contentTopic := protocol.NewContentTopic("basic2", 1, "test", "proto")
|
||||||
|
|
||||||
var version uint32 = 0
|
var version uint32 = 0
|
||||||
var timestamp float64 = utils.GetUnixEpoch()
|
var timestamp float64 = utils.GetUnixEpoch()
|
||||||
|
|
||||||
@ -97,7 +99,7 @@ func write(ctx context.Context, wakuNode *node.WakuNode, msgContent string) {
|
|||||||
msg := &pb.WakuMessage{
|
msg := &pb.WakuMessage{
|
||||||
Payload: payload,
|
Payload: payload,
|
||||||
Version: version,
|
Version: version,
|
||||||
ContentTopic: contentTopic,
|
ContentTopic: contentTopic.String(),
|
||||||
Timestamp: timestamp,
|
Timestamp: timestamp,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,7 +55,8 @@ func NewChat(ctx context.Context, n *node.WakuNode, selfID peer.ID, contentTopic
|
|||||||
ContentTopics: []string{contentTopic},
|
ContentTopics: []string{contentTopic},
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
_, chat.C, err = n.SubscribeFilter(ctx, cf)
|
_, theFilter, err := n.Filter().Subscribe(ctx, cf)
|
||||||
|
chat.C = theFilter.Chan
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@ module chat2
|
|||||||
|
|
||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
// replace github.com/status-im/go-waku => ../..
|
replace github.com/status-im/go-waku => ../..
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/ethereum/go-ethereum v1.10.9
|
github.com/ethereum/go-ethereum v1.10.9
|
||||||
|
|||||||
@ -359,6 +359,7 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
|
|||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
|
github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
|
||||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||||
@ -1070,8 +1071,6 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
|
|||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||||
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
|
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
|
||||||
github.com/status-im/go-waku v0.0.0-20211101194039-94e8b9cf86fc h1:u410QB8K5iFXaI4FYh2JR7A2oCHlXD4CLnI5/gJei9Q=
|
|
||||||
github.com/status-im/go-waku v0.0.0-20211101194039-94e8b9cf86fc/go.mod h1:A0lI3uZYLKrXiviVkwGgBdT8b9HLcW3U/xUcE/4665k=
|
|
||||||
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432 h1:cbNFU38iimo9fY4B7CdF/fvIF6tNPJIZjBbpfmW2EY4=
|
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432 h1:cbNFU38iimo9fY4B7CdF/fvIF6tNPJIZjBbpfmW2EY4=
|
||||||
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432/go.mod h1:A8t3i0CUGtXCA0aiLsP7iyikmk/KaD/2XVvNJqGCU20=
|
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432/go.mod h1:A8t3i0CUGtXCA0aiLsP7iyikmk/KaD/2XVvNJqGCU20=
|
||||||
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
|
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
|
||||||
|
|||||||
@ -20,6 +20,8 @@ import (
|
|||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
"github.com/libp2p/go-libp2p-core/protocol"
|
"github.com/libp2p/go-libp2p-core/protocol"
|
||||||
|
wakuprotocol "github.com/status-im/go-waku/waku/v2/protocol"
|
||||||
|
|
||||||
"github.com/multiformats/go-multiaddr"
|
"github.com/multiformats/go-multiaddr"
|
||||||
"github.com/status-im/go-waku/waku/v2/discovery"
|
"github.com/status-im/go-waku/waku/v2/discovery"
|
||||||
"github.com/status-im/go-waku/waku/v2/node"
|
"github.com/status-im/go-waku/waku/v2/node"
|
||||||
@ -28,7 +30,7 @@ import (
|
|||||||
"github.com/status-im/go-waku/waku/v2/protocol/store"
|
"github.com/status-im/go-waku/waku/v2/protocol/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
var DefaultContentTopic string = "/toy-chat/2/huilong/proto"
|
var DefaultContentTopic string = wakuprotocol.NewContentTopic("toy-chat", 2, "huilong", "proto").String()
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
mrand.Seed(time.Now().UTC().UnixNano())
|
mrand.Seed(time.Now().UTC().UnixNano())
|
||||||
|
|||||||
@ -2,7 +2,7 @@ module filter2
|
|||||||
|
|
||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
// replace github.com/status-im/go-waku => ../..
|
replace github.com/status-im/go-waku => ../..
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/ethereum/go-ethereum v1.10.9
|
github.com/ethereum/go-ethereum v1.10.9
|
||||||
|
|||||||
@ -353,6 +353,7 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
|
|||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
|
github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
|
||||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||||
@ -1053,8 +1054,6 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
|
|||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||||
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
|
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
|
||||||
github.com/status-im/go-waku v0.0.0-20211101194039-94e8b9cf86fc h1:u410QB8K5iFXaI4FYh2JR7A2oCHlXD4CLnI5/gJei9Q=
|
|
||||||
github.com/status-im/go-waku v0.0.0-20211101194039-94e8b9cf86fc/go.mod h1:A0lI3uZYLKrXiviVkwGgBdT8b9HLcW3U/xUcE/4665k=
|
|
||||||
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432 h1:cbNFU38iimo9fY4B7CdF/fvIF6tNPJIZjBbpfmW2EY4=
|
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432 h1:cbNFU38iimo9fY4B7CdF/fvIF6tNPJIZjBbpfmW2EY4=
|
||||||
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432/go.mod h1:A8t3i0CUGtXCA0aiLsP7iyikmk/KaD/2XVvNJqGCU20=
|
github.com/status-im/go-waku-rendezvous v0.0.0-20211018070416-a93f3b70c432/go.mod h1:A8t3i0CUGtXCA0aiLsP7iyikmk/KaD/2XVvNJqGCU20=
|
||||||
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
|
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
"github.com/status-im/go-waku/waku/v2/node"
|
"github.com/status-im/go-waku/waku/v2/node"
|
||||||
|
"github.com/status-im/go-waku/waku/v2/protocol"
|
||||||
"github.com/status-im/go-waku/waku/v2/protocol/filter"
|
"github.com/status-im/go-waku/waku/v2/protocol/filter"
|
||||||
"github.com/status-im/go-waku/waku/v2/protocol/pb"
|
"github.com/status-im/go-waku/waku/v2/protocol/pb"
|
||||||
"github.com/status-im/go-waku/waku/v2/protocol/relay"
|
"github.com/status-im/go-waku/waku/v2/protocol/relay"
|
||||||
@ -22,7 +23,7 @@ import (
|
|||||||
|
|
||||||
var log = logging.Logger("filter2")
|
var log = logging.Logger("filter2")
|
||||||
|
|
||||||
var pubSubTopic = relay.DefaultWakuTopic
|
var pubSubTopic = protocol.DefaultPubsubTopic()
|
||||||
|
|
||||||
const contentTopic = "test"
|
const contentTopic = "test"
|
||||||
|
|
||||||
@ -98,17 +99,17 @@ func main() {
|
|||||||
|
|
||||||
// Send FilterRequest from light node to full node
|
// Send FilterRequest from light node to full node
|
||||||
cf := filter.ContentFilter{
|
cf := filter.ContentFilter{
|
||||||
Topic: string(pubSubTopic),
|
Topic: pubSubTopic.String(),
|
||||||
ContentTopics: []string{contentTopic},
|
ContentTopics: []string{contentTopic},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, filterChan, err := lightNode.SubscribeFilter(ctx, cf)
|
_, theFilter, err := lightNode.Filter().Subscribe(ctx, cf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for env := range filterChan {
|
for env := range theFilter.Chan {
|
||||||
log.Info("Light node received msg, ", string(env.Message().Payload))
|
log.Info("Light node received msg, ", string(env.Message().Payload))
|
||||||
}
|
}
|
||||||
log.Info("Message channel closed!")
|
log.Info("Message channel closed!")
|
||||||
@ -120,7 +121,7 @@ func main() {
|
|||||||
go func() {
|
go func() {
|
||||||
// Unsubscribe filter after 5 seconds
|
// Unsubscribe filter after 5 seconds
|
||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
lightNode.UnsubscribeFilter(ctx, cf)
|
lightNode.Filter().UnsubscribeFilter(ctx, cf)
|
||||||
}()
|
}()
|
||||||
// Wait for a SIGINT or SIGTERM signal
|
// Wait for a SIGINT or SIGTERM signal
|
||||||
ch := make(chan os.Signal, 1)
|
ch := make(chan os.Signal, 1)
|
||||||
@ -172,7 +173,8 @@ func writeLoop(ctx context.Context, wakuNode *node.WakuNode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func readLoop(ctx context.Context, wakuNode *node.WakuNode) {
|
func readLoop(ctx context.Context, wakuNode *node.WakuNode) {
|
||||||
sub, err := wakuNode.Relay().Subscribe(ctx, &pubSubTopic)
|
pubsubTopic := relay.Topic(pubSubTopic.String())
|
||||||
|
sub, err := wakuNode.Relay().Subscribe(ctx, &pubsubTopic)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Could not subscribe: ", err)
|
log.Error("Could not subscribe: ", err)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -27,7 +27,8 @@ var log = logging.Logger("wakurelay")
|
|||||||
type Topic string
|
type Topic string
|
||||||
|
|
||||||
const WakuRelayID_v200 = protocol.ID("/vac/waku/relay/2.0.0")
|
const WakuRelayID_v200 = protocol.ID("/vac/waku/relay/2.0.0")
|
||||||
const DefaultWakuTopic Topic = "/waku/2/default-waku/proto"
|
|
||||||
|
var DefaultWakuTopic Topic = Topic(waku_proto.DefaultPubsubTopic().String())
|
||||||
|
|
||||||
type WakuRelay struct {
|
type WakuRelay struct {
|
||||||
host host.Host
|
host host.Host
|
||||||
|
|||||||
91
waku/v2/protocol/topic.go
Normal file
91
waku/v2/protocol/topic.go
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
package protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ErrInvalidFormat = errors.New("invalid format")
|
||||||
|
|
||||||
|
type ContentTopic struct {
|
||||||
|
ApplicationName string
|
||||||
|
ApplicationVersion uint
|
||||||
|
ContentTopicName string
|
||||||
|
Encoding string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ct ContentTopic) String() string {
|
||||||
|
return fmt.Sprintf("/%s/%d/%s/%s", ct.ApplicationName, ct.ApplicationVersion, ct.ContentTopicName, ct.Encoding)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewContentTopic(applicationName string, applicationVersion uint, contentTopicName string, encoding string) ContentTopic {
|
||||||
|
return ContentTopic{
|
||||||
|
ApplicationName: applicationName,
|
||||||
|
ApplicationVersion: applicationVersion,
|
||||||
|
ContentTopicName: contentTopicName,
|
||||||
|
Encoding: encoding,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ct ContentTopic) Equal(ct2 ContentTopic) bool {
|
||||||
|
return ct.ApplicationName == ct2.ApplicationName && ct.ApplicationVersion == ct2.ApplicationVersion &&
|
||||||
|
ct.ContentTopicName == ct2.ContentTopicName && ct.Encoding == ct2.Encoding
|
||||||
|
}
|
||||||
|
|
||||||
|
func StringToContentTopic(s string) (ContentTopic, error) {
|
||||||
|
p := strings.Split(s, "/")
|
||||||
|
|
||||||
|
if len(p) != 5 || p[0] != "" || p[1] == "" || p[2] == "" || p[3] == "" || p[4] == "" {
|
||||||
|
return ContentTopic{}, ErrInvalidFormat
|
||||||
|
}
|
||||||
|
|
||||||
|
vNum, err := strconv.ParseUint(p[2], 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
return ContentTopic{}, ErrInvalidFormat
|
||||||
|
}
|
||||||
|
|
||||||
|
return ContentTopic{
|
||||||
|
ApplicationName: p[1],
|
||||||
|
ApplicationVersion: uint(vNum),
|
||||||
|
ContentTopicName: p[3],
|
||||||
|
Encoding: p[4],
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type PubsubTopic struct {
|
||||||
|
Name string
|
||||||
|
Encoding string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t PubsubTopic) String() string {
|
||||||
|
return fmt.Sprintf("/waku/2/%s/%s", t.Name, t.Encoding)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DefaultPubsubTopic() PubsubTopic {
|
||||||
|
return NewPubsubTopic("default-waku", "proto")
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPubsubTopic(name string, encoding string) PubsubTopic {
|
||||||
|
return PubsubTopic{
|
||||||
|
Name: name,
|
||||||
|
Encoding: encoding,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t PubsubTopic) Equal(t2 PubsubTopic) bool {
|
||||||
|
return t.Name == t2.Name && t.Encoding == t2.Encoding
|
||||||
|
}
|
||||||
|
|
||||||
|
func StringToPubsubTopic(s string) (PubsubTopic, error) {
|
||||||
|
p := strings.Split(s, "/")
|
||||||
|
if len(p) != 5 || p[0] != "" || p[1] != "waku" || p[2] != "2" || p[3] == "" || p[4] == "" {
|
||||||
|
return PubsubTopic{}, ErrInvalidFormat
|
||||||
|
}
|
||||||
|
|
||||||
|
return PubsubTopic{
|
||||||
|
Name: p[3],
|
||||||
|
Encoding: p[4],
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
57
waku/v2/protocol/topic_test.go
Normal file
57
waku/v2/protocol/topic_test.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestContentTopic(t *testing.T) {
|
||||||
|
ct := NewContentTopic("waku", 2, "test", "proto")
|
||||||
|
require.Equal(t, ct.String(), "/waku/2/test/proto")
|
||||||
|
|
||||||
|
_, err := StringToContentTopic("/waku/-1/a/b")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
_, err = StringToContentTopic("waku/1/a/b")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
_, err = StringToContentTopic("////")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
_, err = StringToContentTopic("/waku/1/a")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
ct2, err := StringToContentTopic("/waku/2/test/proto")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, ct.String(), ct2.String())
|
||||||
|
require.True(t, ct.Equal(ct2))
|
||||||
|
|
||||||
|
ct3 := NewContentTopic("waku", 2, "test2", "proto")
|
||||||
|
require.False(t, ct.Equal(ct3))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTopic(t *testing.T) {
|
||||||
|
topic := NewPubsubTopic("test", "proto")
|
||||||
|
require.Equal(t, topic.String(), "/waku/2/test/proto")
|
||||||
|
|
||||||
|
_, err := StringToPubsubTopic("/waku/-1/a/b")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
_, err = StringToPubsubTopic("waku/2/a/b")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
_, err = StringToPubsubTopic("////")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
_, err = StringToPubsubTopic("/waku/2/a")
|
||||||
|
require.Error(t, ErrInvalidFormat, err)
|
||||||
|
|
||||||
|
topic2, err := StringToPubsubTopic("/waku/2/test/proto")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, topic.String(), topic2.String())
|
||||||
|
require.True(t, topic.Equal(topic2))
|
||||||
|
|
||||||
|
topic3 := NewPubsubTopic("test2", "proto")
|
||||||
|
require.False(t, topic.Equal(topic3))
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user