friends/nex/secure.go
2025-02-15 23:31:32 -05:00

70 lines
2.2 KiB
Go

package nex
import (
"os"
"strconv"
"time"
database_3ds "github.com/PretendoNetwork/friends/database/3ds"
database_wiiu "github.com/PretendoNetwork/friends/database/wiiu"
"github.com/PretendoNetwork/friends/globals"
notifications_3ds "github.com/PretendoNetwork/friends/notifications/3ds"
notifications_wiiu "github.com/PretendoNetwork/friends/notifications/wiiu"
friends_types "github.com/PretendoNetwork/friends/types"
nex "github.com/PretendoNetwork/nex-go/v2"
"github.com/PretendoNetwork/nex-go/v2/types"
_ "github.com/PretendoNetwork/nex-protocols-go/v2"
)
func StartSecureServer() {
port, _ := strconv.Atoi(os.Getenv("PN_FRIENDS_SECURE_SERVER_PORT"))
globals.SecureServer = nex.NewPRUDPServer()
globals.SecureEndpoint = nex.NewPRUDPEndPoint(1)
globals.SecureEndpoint.ServerAccount = globals.SecureServerAccount
globals.SecureEndpoint.AccountDetailsByPID = globals.AccountDetailsByPID
globals.SecureEndpoint.AccountDetailsByUsername = globals.AccountDetailsByUsername
globals.SecureEndpoint.OnConnectionEnded(func(connection *nex.PRUDPConnection) {
pid := uint32(connection.PID())
user, ok := globals.ConnectedUsers.Get(pid)
if !ok || user == nil {
return
}
platform := user.Platform
lastOnline := types.NewDateTime(0)
lastOnline.FromTimestamp(time.Now())
if platform == friends_types.WUP {
err := database_wiiu.UpdateUserLastOnlineTime(pid, lastOnline)
if err != nil {
globals.Logger.Critical(err.Error())
}
notifications_wiiu.SendUserWentOfflineGlobally(connection)
} else if platform == friends_types.CTR {
err := database_3ds.UpdateUserLastOnlineTime(pid, lastOnline)
if err != nil {
globals.Logger.Critical(err.Error())
}
notifications_3ds.SendUserWentOfflineGlobally(connection)
}
globals.ConnectedUsers.Delete(pid)
})
registerCommonSecureServerProtocols()
registerSecureServerProtocols()
globals.SecureEndpoint.IsSecureEndPoint = true
globals.SecureServer.SetFragmentSize(962)
globals.SecureServer.LibraryVersions.SetDefault(nex.NewLibraryVersion(1, 1, 0))
globals.SecureServer.SessionKeyLength = 16
globals.SecureServer.AccessKey = "ridfebb9"
globals.SecureServer.BindPRUDPEndPoint(globals.SecureEndpoint)
globals.SecureServer.Listen(port)
}