You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
67 lines
1.5 KiB
package app |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"net/http" |
|
|
|
"lol.mleku.dev/chk" |
|
"lol.mleku.dev/log" |
|
"next.orly.dev/app/config" |
|
"next.orly.dev/pkg/database" |
|
"next.orly.dev/pkg/encoders/bech32encoding" |
|
"next.orly.dev/pkg/protocol/publish" |
|
) |
|
|
|
func Run( |
|
ctx context.Context, cfg *config.C, db *database.D, |
|
) (quit chan struct{}) { |
|
// shutdown handler |
|
go func() { |
|
select { |
|
case <-ctx.Done(): |
|
log.I.F("shutting down") |
|
close(quit) |
|
} |
|
}() |
|
// get the admins |
|
var err error |
|
var adminKeys [][]byte |
|
for _, admin := range cfg.Admins { |
|
if len(admin) == 0 { |
|
continue |
|
} |
|
var pk []byte |
|
if pk, err = bech32encoding.NpubOrHexToPublicKeyBinary(admin); chk.E(err) { |
|
continue |
|
} |
|
adminKeys = append(adminKeys, pk) |
|
} |
|
// start listener |
|
l := &Server{ |
|
Ctx: ctx, |
|
Config: cfg, |
|
D: db, |
|
publishers: publish.New(NewPublisher(ctx)), |
|
Admins: adminKeys, |
|
} |
|
// Initialize the user interface |
|
l.UserInterface() |
|
if l.paymentProcessor, err = NewPaymentProcessor(ctx, cfg, db); err != nil { |
|
log.E.F("failed to create payment processor: %v", err) |
|
// Continue without payment processor |
|
} else { |
|
if err = l.paymentProcessor.Start(); err != nil { |
|
log.E.F("failed to start payment processor: %v", err) |
|
} else { |
|
log.I.F("payment processor started successfully") |
|
} |
|
} |
|
addr := fmt.Sprintf("%s:%d", cfg.Listen, cfg.Port) |
|
log.I.F("starting listener on http://%s", addr) |
|
go func() { |
|
chk.E(http.ListenAndServe(addr, l)) |
|
}() |
|
quit = make(chan struct{}) |
|
return |
|
}
|
|
|