Initial commit
This commit is contained in:
commit
7c10a881fe
31
cmd/main.go
Normal file
31
cmd/main.go
Normal file
@ -0,0 +1,31 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"git.grassecon.net/term/event/nats"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
n := nats.NewNatsSubscription()
|
||||
err := n.Connect(ctx, "localhost:4222")
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Connect err: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer n.Close()
|
||||
|
||||
cint := make(chan os.Signal)
|
||||
cterm := make(chan os.Signal)
|
||||
signal.Notify(cint, os.Interrupt, syscall.SIGINT)
|
||||
signal.Notify(cterm, os.Interrupt, syscall.SIGTERM)
|
||||
select {
|
||||
case _ = <-cint:
|
||||
case _ = <-cterm:
|
||||
}
|
||||
}
|
18
common/hex.go
Normal file
18
common/hex.go
Normal file
@ -0,0 +1,18 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
)
|
||||
|
||||
func NormalizeHex(s string) (string, error) {
|
||||
if len(s) >= 2 {
|
||||
if s[:2] == "0x" {
|
||||
s = s[2:]
|
||||
}
|
||||
}
|
||||
r, err := hex.DecodeString(s)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return hex.EncodeToString(r), nil
|
||||
}
|
105
event/nats/nats.go
Normal file
105
event/nats/nats.go
Normal file
@ -0,0 +1,105 @@
|
||||
package nats
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
|
||||
nats "github.com/nats-io/nats.go"
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
|
||||
"git.defalsify.org/vise.git/logging"
|
||||
|
||||
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
|
||||
"git.grassecon.net/term/event"
|
||||
)
|
||||
|
||||
const (
|
||||
evGive = "TRACKER.FAUCET_GIVE"
|
||||
evReg = "TRACKER.CUSTODIAL_REGISTRATION"
|
||||
)
|
||||
|
||||
var (
|
||||
logg = logging.NewVanilla().WithDomain("nats")
|
||||
)
|
||||
|
||||
type NatsSubscription struct {
|
||||
*event.Router
|
||||
ctx context.Context
|
||||
conn *nats.Conn
|
||||
js jetstream.JetStream
|
||||
cs jetstream.Consumer
|
||||
cctx jetstream.ConsumeContext
|
||||
}
|
||||
|
||||
func NewNatsSubscription() *NatsSubscription {
|
||||
return &NatsSubscription{}
|
||||
}
|
||||
|
||||
func(n *NatsSubscription) Connect(ctx context.Context, connStr string) error {
|
||||
var err error
|
||||
|
||||
n.conn, err = nats.Connect(connStr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n.js, err = jetstream.New(n.conn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n.cs, err = n.js.OrderedConsumer(ctx, "TRACKER", jetstream.OrderedConsumerConfig{
|
||||
//FilterSubjects: []string{"TRACKER.*"},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
n.ctx = ctx
|
||||
n.cctx, err = n.cs.Consume(n.handleEvent)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func(n *NatsSubscription) Close() error {
|
||||
n.cctx.Stop()
|
||||
select {
|
||||
case <-n.cctx.Closed():
|
||||
n.conn.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func fail(m jetstream.Msg) {
|
||||
err := m.Nak()
|
||||
if err != nil {
|
||||
logg.Errorf("nats nak fail", "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
func(n *NatsSubscription) handleEvent(m jetstream.Msg) {
|
||||
var ev geEvent.Event
|
||||
|
||||
logg.Tracef("have msg", "err", m)
|
||||
b := m.Data()
|
||||
err := json.Unmarshal(b, &ev)
|
||||
if err != nil {
|
||||
logg.Errorf("nats msg deserialize fail", "err", err)
|
||||
fail(m)
|
||||
return
|
||||
}
|
||||
err = n.Route(&ev)
|
||||
if err != nil {
|
||||
logg.Errorf("handler route fail", "err", err)
|
||||
fail(m)
|
||||
return
|
||||
}
|
||||
err = m.Ack()
|
||||
// err = m.DoubleAck(n.ctx)
|
||||
if err != nil {
|
||||
logg.Errorf("ack fail", "err", err)
|
||||
panic("ack fail")
|
||||
}
|
||||
}
|
12
event/route.go
Normal file
12
event/route.go
Normal file
@ -0,0 +1,12 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
geEvent "github.com/grassrootseconomics/eth-tracker/pkg/event"
|
||||
)
|
||||
|
||||
type Router struct {
|
||||
}
|
||||
|
||||
func(r *Router) Route(ev *geEvent.Event) error {
|
||||
return nil
|
||||
}
|
12
event/sub.go
Normal file
12
event/sub.go
Normal file
@ -0,0 +1,12 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
)
|
||||
|
||||
type Subscription interface {
|
||||
io.Closer
|
||||
Connect(ctx context.Context, connStr string) error
|
||||
Next() error
|
||||
}
|
19
go.mod
Normal file
19
go.mod
Normal file
@ -0,0 +1,19 @@
|
||||
module git.grassecon.net/term
|
||||
|
||||
go 1.23.2
|
||||
|
||||
require (
|
||||
git.defalsify.org/vise.git v0.2.0
|
||||
github.com/grassrootseconomics/eth-tracker v1.3.0-rc
|
||||
github.com/nats-io/nats.go v1.37.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c // indirect
|
||||
github.com/klauspost/compress v1.17.2 // indirect
|
||||
github.com/nats-io/nkeys v0.4.7 // indirect
|
||||
github.com/nats-io/nuid v1.0.1 // indirect
|
||||
golang.org/x/crypto v0.26.0 // indirect
|
||||
golang.org/x/sys v0.24.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
)
|
20
go.sum
Normal file
20
go.sum
Normal file
@ -0,0 +1,20 @@
|
||||
git.defalsify.org/vise.git v0.2.0 h1:X2ZgiGRq4C+9qOlDMP0b/oE5QHjVQNT4aEFZB88ST0Q=
|
||||
git.defalsify.org/vise.git v0.2.0/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
|
||||
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c h1:H9Nm+I7Cg/YVPpEV1RzU3Wq2pjamPc/UtHDgItcb7lE=
|
||||
github.com/barbashov/iso639-3 v0.0.0-20211020172741-1f4ffb2d8d1c/go.mod h1:rGod7o6KPeJ+hyBpHfhi4v7blx9sf+QsHsA7KAsdN6U=
|
||||
github.com/grassrootseconomics/eth-tracker v1.3.0-rc h1:iYe2rwCBrU5O8x0+HSJRjcPT1h68k/uGd3i/cJJQuTQ=
|
||||
github.com/grassrootseconomics/eth-tracker v1.3.0-rc/go.mod h1:rLXM5u8FDHnMEdah8ACgo/wfawu4o2sljHGkky2rQKE=
|
||||
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
|
||||
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/nats-io/nats.go v1.37.0 h1:07rauXbVnnJvv1gfIyghFEo6lUcYRY0WXc3x7x0vUxE=
|
||||
github.com/nats-io/nats.go v1.37.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
|
||||
github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI=
|
||||
github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
|
||||
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
|
||||
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
||||
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
9
handler/error.go
Normal file
9
handler/error.go
Normal file
@ -0,0 +1,9 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrInvalidPayload = fmt.Errorf("Invalid event payload")
|
||||
)
|
26
handler/reg.go
Normal file
26
handler/reg.go
Normal file
@ -0,0 +1,26 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"git.defalsify.org/vise.git/db"
|
||||
|
||||
"git.grassecon.net/term/common"
|
||||
"git.grassecon.net/term/lookup"
|
||||
)
|
||||
|
||||
func HandleEvReg(store db.Db, payload map[string]any) error {
|
||||
var err error
|
||||
address, ok := payload["address"].(string)
|
||||
if !ok {
|
||||
return ErrInvalidPayload
|
||||
}
|
||||
address, err = common.NormalizeHex(address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sessionId, err := lookup.GetSessionIdByAddress(store, address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_ = sessionId
|
||||
return nil
|
||||
}
|
10
lookup/db.go
Normal file
10
lookup/db.go
Normal file
@ -0,0 +1,10 @@
|
||||
package lookup
|
||||
|
||||
import (
|
||||
"git.defalsify.org/vise.git/db"
|
||||
)
|
||||
|
||||
func GetSessionIdByAddress(store db.Db, address string) (string, error) {
|
||||
var r string
|
||||
return r, nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user