aim-oscar-server/main.go

84 lines
1.8 KiB
Go
Raw Normal View History

2021-11-10 13:46:52 -05:00
package main
import (
2021-12-16 17:41:17 -05:00
"aim-oscar/models"
2021-12-16 19:45:32 -05:00
"aim-oscar/oscar"
2021-12-16 17:41:17 -05:00
"context"
"database/sql"
2021-11-10 13:46:52 -05:00
"fmt"
"log"
"net"
"os"
"os/signal"
"syscall"
2021-12-16 19:45:32 -05:00
"time"
2021-11-24 11:59:53 -05:00
2021-12-16 17:41:17 -05:00
"github.com/uptrace/bun"
"github.com/uptrace/bun/dbfixture"
"github.com/uptrace/bun/dialect/sqlitedialect"
"github.com/uptrace/bun/driver/sqliteshim"
"github.com/uptrace/bun/extra/bundebug"
2021-11-10 13:46:52 -05:00
)
const (
SRV_HOST = ""
SRV_PORT = "5190"
SRV_ADDRESS = SRV_HOST + ":" + SRV_PORT
)
2021-12-16 19:45:32 -05:00
var db *bun.DB
2021-11-10 13:46:52 -05:00
func main() {
2021-12-16 17:41:17 -05:00
// Set up the DB
sqldb, err := sql.Open(sqliteshim.ShimName, "file::memory:?cache=shared")
if err != nil {
panic(err)
}
db := bun.NewDB(sqldb, sqlitedialect.New())
2021-12-16 19:45:32 -05:00
db.SetConnMaxIdleTime(15 * time.Second)
db.SetConnMaxLifetime(1 * time.Minute)
2021-12-16 17:41:17 -05:00
// Print all queries to stdout.
db.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(true)))
2021-12-16 19:45:32 -05:00
// Register our DB models
2021-12-16 17:41:17 -05:00
db.RegisterModel((*models.User)(nil))
2021-12-16 19:45:32 -05:00
// dev: load in fixtures to test against
2021-12-16 17:41:17 -05:00
fixture := dbfixture.New(db, dbfixture.WithRecreateTables())
err = fixture.Load(context.Background(), os.DirFS("models"), "fixtures.yml")
if err != nil {
panic(err)
}
2021-11-10 13:46:52 -05:00
listener, err := net.Listen("tcp", SRV_ADDRESS)
if err != nil {
fmt.Println("Error listening: ", err.Error())
os.Exit(1)
}
defer listener.Close()
2021-12-16 19:45:32 -05:00
handler := oscar.NewHandler()
handler.RegisterService(0x17, &AuthorizationRegistrationService{db: db})
2021-11-10 13:46:52 -05:00
exitChan := make(chan os.Signal, 1)
signal.Notify(exitChan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM, syscall.SIGABRT)
go func() {
<-exitChan
fmt.Println("Shutting down")
os.Exit(1)
}()
fmt.Println("OSCAR listening on " + SRV_ADDRESS)
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection: ", err.Error())
os.Exit(1)
}
log.Printf("Connection from %v", conn.RemoteAddr())
2021-12-16 19:45:32 -05:00
go handler.Handle(conn)
}
2021-11-10 13:46:52 -05:00
}