Skip to content

Commit

Permalink
new cb
Browse files Browse the repository at this point in the history
  • Loading branch information
kdudkov committed Oct 20, 2023
1 parent d9b61a3 commit dcc2222
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 33 deletions.
4 changes: 4 additions & 0 deletions cmd/goatak_server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@ func (app *App) RemoveHandlerCb(cl client.ClientHandler) {
app.RemoveClientHandler(cl.GetName())
}

func (app *App) NewContactCb(uid, callsign string) {
app.Logger.Infof("new contact: %s %s", uid, callsign)
}

func (app *App) ConnectTo(addr string) {
name := "ext_" + addr
for app.ctx.Err() == nil {
Expand Down
20 changes: 11 additions & 9 deletions cmd/goatak_server/tcpserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ func (app *App) ListenTCP(addr string) (err error) {
app.Logger.Infof("TCP connection from %s", conn.RemoteAddr())
name := "tcp:" + conn.RemoteAddr().String()
h := client.NewConnClientHandler(name, conn, &client.HandlerConfig{
Logger: app.Logger.With(zap.String("addr", name)),
MessageCb: app.NewCotMessage,
RemoveCb: app.RemoveHandlerCb})
Logger: app.Logger.With(zap.String("addr", name)),
MessageCb: app.NewCotMessage,
RemoveCb: app.RemoveHandlerCb,
NewContactCb: app.NewContactCb})
app.AddClientHandler(h)
h.Start()
}
Expand Down Expand Up @@ -77,12 +78,13 @@ func (app *App) listenTls(addr string) error {

name := "ssl:" + conn.RemoteAddr().String()
h := client.NewConnClientHandler(name, conn, &client.HandlerConfig{
Logger: app.Logger.With(zap.String("user", username), zap.String("addr", name)),
User: username,
Scope: scope,
Serial: serial,
MessageCb: app.NewCotMessage,
RemoveCb: app.RemoveHandlerCb})
Logger: app.Logger.With(zap.String("user", username), zap.String("addr", name)),
User: username,
Scope: scope,
Serial: serial,
MessageCb: app.NewCotMessage,
RemoveCb: app.RemoveHandlerCb,
NewContactCb: app.NewContactCb})
app.AddClientHandler(h)
h.Start()
app.onTlsClientConnect(username, serial)
Expand Down
40 changes: 16 additions & 24 deletions internal/client/client_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ const (
)

type HandlerConfig struct {
User string
Scope string
Serial string
Uid string
IsClient bool
MessageCb func(msg *cot.CotMessage)
RemoveCb func(ch ClientHandler)
Logger *zap.SugaredLogger
User string
Scope string
Serial string
Uid string
IsClient bool
MessageCb func(msg *cot.CotMessage)
RemoveCb func(ch ClientHandler)
NewContactCb func(uid, callsign string)
Logger *zap.SugaredLogger
}

type ClientHandler interface {
Expand Down Expand Up @@ -62,6 +63,7 @@ type ConnClientHandler struct {
serial string
messageCb func(msg *cot.CotMessage)
removeCb func(ch ClientHandler)
newContactCb func(uid, callsign string)
logger *zap.SugaredLogger
}

Expand Down Expand Up @@ -89,6 +91,7 @@ func NewConnClientHandler(name string, conn net.Conn, config *HandlerConfig) *Co
c.isClient = config.IsClient
c.messageCb = config.MessageCb
c.removeCb = config.RemoveCb
c.newContactCb = config.NewContactCb
}
c.closeTimer = time.AfterFunc(idleTimeout, c.closeIdle)
return c
Expand Down Expand Up @@ -204,7 +207,11 @@ func (h *ConnClientHandler) handleRead() {
if strings.HasSuffix(uid, "-ping") {
uid = uid[:len(uid)-5]
}
h.uids.Store(uid, cotmsg.GetCallsign())
if _, present := h.uids.Swap(uid, cotmsg.GetCallsign()); !present {
if h.newContactCb != nil {
h.newContactCb(uid, cotmsg.GetCallsign())
}
}
}

// remove contact
Expand Down Expand Up @@ -322,21 +329,6 @@ func (h *ConnClientHandler) GetVersion() int32 {
return atomic.LoadInt32(&h.ver)
}

func (h *ConnClientHandler) checkContact(msg *cot.CotMessage) {
if msg.IsContact() {
uid := msg.TakMessage.CotEvent.Uid
if strings.HasSuffix(uid, "-ping") {
uid = uid[:len(uid)-5]
}
h.uids.Store(uid, msg.GetCallsign())
}

if msg.GetType() == "t-x-d-d" && msg.Detail != nil && msg.Detail.Has("link") {
uid := msg.Detail.GetFirst("link").GetAttr("uid")
h.uids.Delete(uid)
}
}

func (h *ConnClientHandler) GetUid(callsign string) string {
res := ""
h.uids.Range(func(key, value any) bool {
Expand Down

0 comments on commit dcc2222

Please sign in to comment.