mirror of
https://github.com/PretendoNetwork/friends.git
synced 2025-04-02 11:01:46 -04:00
62 lines
2.5 KiB
Go
62 lines
2.5 KiB
Go
package notifications_3ds
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
database_3ds "github.com/PretendoNetwork/friends/database/3ds"
|
|
"github.com/PretendoNetwork/friends/globals"
|
|
nex "github.com/PretendoNetwork/nex-go/v2"
|
|
"github.com/PretendoNetwork/nex-go/v2/constants"
|
|
"github.com/PretendoNetwork/nex-go/v2/types"
|
|
friends_3ds_types "github.com/PretendoNetwork/nex-protocols-go/v2/friends-3ds/types"
|
|
nintendo_notifications "github.com/PretendoNetwork/nex-protocols-go/v2/nintendo-notifications"
|
|
nintendo_notifications_types "github.com/PretendoNetwork/nex-protocols-go/v2/nintendo-notifications/types"
|
|
)
|
|
|
|
func SendFavoriteUpdate(connection *nex.PRUDPConnection, gameKey friends_3ds_types.GameKey) {
|
|
eventObject := nintendo_notifications_types.NewNintendoNotificationEvent()
|
|
eventObject.Type = types.NewUInt32(2)
|
|
eventObject.SenderPID = connection.PID()
|
|
eventObject.DataHolder = types.NewDataHolder()
|
|
eventObject.DataHolder.Object = gameKey.Copy().(friends_3ds_types.GameKey)
|
|
|
|
stream := nex.NewByteStreamOut(globals.SecureEndpoint.LibraryVersions(), globals.SecureEndpoint.ByteStreamSettings())
|
|
|
|
eventObject.WriteTo(stream)
|
|
|
|
notificationRequest := nex.NewRMCRequest(globals.SecureEndpoint)
|
|
notificationRequest.ProtocolID = nintendo_notifications.ProtocolID
|
|
notificationRequest.CallID = 3810693103
|
|
notificationRequest.MethodID = nintendo_notifications.MethodProcessNintendoNotificationEvent1
|
|
notificationRequest.Parameters = stream.Bytes()
|
|
|
|
notificationRequestBytes := notificationRequest.Bytes()
|
|
|
|
friendsList, err := database_3ds.GetUserFriends(uint32(connection.PID()))
|
|
if err != nil && err != sql.ErrNoRows {
|
|
globals.Logger.Critical(err.Error())
|
|
}
|
|
|
|
if friendsList == nil {
|
|
return
|
|
}
|
|
|
|
for _, friend := range friendsList {
|
|
connectedUser, ok := globals.ConnectedUsers.Get(uint32(friend.PID))
|
|
|
|
if ok && connectedUser != nil {
|
|
requestPacket, _ := nex.NewPRUDPPacketV0(globals.SecureEndpoint.Server, connectedUser.Connection, nil)
|
|
|
|
requestPacket.SetType(constants.DataPacket)
|
|
requestPacket.AddFlag(constants.PacketFlagNeedsAck)
|
|
requestPacket.AddFlag(constants.PacketFlagReliable)
|
|
requestPacket.SetSourceVirtualPortStreamType(connectedUser.Connection.StreamType)
|
|
requestPacket.SetSourceVirtualPortStreamID(globals.SecureEndpoint.StreamID)
|
|
requestPacket.SetDestinationVirtualPortStreamType(connectedUser.Connection.StreamType)
|
|
requestPacket.SetDestinationVirtualPortStreamID(connectedUser.Connection.StreamID)
|
|
requestPacket.SetPayload(notificationRequestBytes)
|
|
|
|
globals.SecureServer.Send(requestPacket)
|
|
}
|
|
}
|
|
}
|