client/reader.js

'use strict';
const Base = require('../base');
const Packet = require('../packets');
const Layouts = require('../layouts');

class Reader extends Base.Reader {
    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SendUserStatus(raw) {
        return {
            id: Packet.Client_SendUserStatus, data: this.UnmarshalPacket(raw, Layouts.userStatus)
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SendIrcMessage(raw) {
        return {
            id: Packet.Client_SendIrcMessage, data: this.UnmarshalPacket(raw, Layouts.message)
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    Exit(raw) {
        return {
            id: Packet.Client_Exit, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    RequestStatusUpdate() {
        return {
            id: Packet.Client_RequestStatusUpdate, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    Pong() {
        return {
            id: Packet.Client_Pong, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    StartSpectating(raw) {
        return {
            id: Packet.Client_StartSpectating, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    StopSpectating() {
        return {
            id: Packet.Client_StopSpectating, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SpectateFrames(raw) {
        return {
            id: Packet.Client_SpectateFrames, data: this.UnmarshalPacket(raw, Layouts.spectateFrames)
        }
    }

    /**
     *
     * @return {Packet}
     */
    ErrorReport() {
        return {
            id: Packet.Client_ErrorReport, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    CantSpectate() {
        return {
            id: Packet.Client_CantSpectate, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SendIrcMessagePrivate(raw) {
        return {
            id: Packet.Client_SendIrcMessagePrivate, data: this.UnmarshalPacket(raw, Layouts.message)
        }
    }

    /**
     *
     * @return {Packet}
     */
    LobbyPart() {
        return {
            id: Packet.Client_LobbyPart, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    LobbyJoin() {
        return {
            id: Packet.Client_LobbyJoin, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchCreate(raw) {
        return {
            id: Packet.Client_MatchCreate, data: this.UnmarshalPacket(raw, Layouts.multiplayerLobby)
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchJoin(raw) {
        return {
            id: Packet.Client_MatchJoin, data: this.UnmarshalPacket(raw, Layouts.multiplayerJoin)
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchPart() {
        return {
            id: Packet.Client_MatchPart, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchChangeSlot(raw) {
        return {
            id: Packet.Client_MatchChangeSlot, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchReady() {
        return {
            id: Packet.Client_MatchReady, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchLock(raw) {
        return {
            id: Packet.Client_MatchLock, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchChangeSettings(raw) {
        return {
            id: Packet.Client_MatchChangeSettings, data: this.UnmarshalPacket(raw, Layouts.multiplayerLobby)
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchStart() {
        return {
            id: Packet.Client_MatchStart, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchScoreUpdate(raw) {
        return {
            id: Packet.Client_MatchScoreUpdate, data: this.UnmarshalPacket(raw, {type: 'scoreframe'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchComplete() {
        return {
            id: Packet.Client_MatchComplete, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchChangeMods(raw) {
        return {
            id: Packet.Client_MatchChangeMods, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchLoadComplete() {
        return {
            id: Packet.Client_MatchLoadComplete, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchNoBeatmap() {
        return {
            id: Packet.Client_MatchNoBeatmap, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchNotReady() {
        return {
            id: Packet.Client_MatchNotReady, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchFailed() {
        return {
            id: Packet.Client_MatchFailed, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchHasBeatmap() {
        return {
            id: Packet.Client_MatchHasBeatmap, data: null
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchSkipRequest() {
        return {
            id: Packet.Client_MatchSkipRequest, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    ChannelJoin(raw) {
        return {
            id: Packet.Client_ChannelJoin, data: this.UnmarshalPacket(raw, {type: 'string'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    BeatmapInfoRequest() {
        return {
            id: Packet.Client_BeatmapInfoRequest, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchTransferHost(raw) {
        return {
            id: Packet.Client_MatchTransferHost, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    FriendAdd(raw) {
        return {
            id: Packet.Client_FriendAdd, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    FriendRemove(raw) {
        return {
            id: Packet.Client_FriendRemove, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchChangeTeam() {
        return {
            id: Packet.Client_MatchChangeTeam, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    ChannelLeave(raw) {
        return {
            id: Packet.Client_ChannelLeave, data: this.UnmarshalPacket(raw, {type: 'string'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    ReceiveUpdates(raw) {
        return {
            id: Packet.Client_ReceiveUpdates, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SetIrcAwayMessage(raw) {
        return {
            id: Packet.Client_SetIrcAwayMessage, data: this.UnmarshalPacket(raw, Layouts.message)
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    UserStatsRequest(raw) {
        return {
            id: Packet.Client_UserStatsRequest, data: this.UnmarshalPacket(raw, {type: 'int32array'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    Invite(raw) {
        return {
            id: Packet.Client_Invite, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    MatchChangePassword(raw) {
        return {
            id: Packet.Client_MatchChangePassword, data: this.UnmarshalPacket(raw, Layouts.multiplayerLobby)
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SpecialMatchInfoRequest(raw) {
        return {
            id: Packet.Client_SpecialMatchInfoRequest, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    UserPresenceRequest(raw) {
        return {
            id: Packet.Client_UserPresenceRequest, data: this.UnmarshalPacket(raw, {type: 'int32array'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    UserPresenceRequestAll() {
        return {
            id: Packet.Client_UserPresenceRequestAll, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    UserToggleBlockNonFriendPM(raw) {
        return {
            id: Packet.Client_UserToggleBlockNonFriendPM, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @return {Packet}
     */
    MatchAbort() {
        return {
            id: Packet.Client_MatchAbort, data: null
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SpecialJoinMatchChannel(raw) {
        return {
            id: Packet.Client_SpecialJoinMatchChannel, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }

    /**
     *
     * @param {OsuBuffer} raw
     * @return {Packet}
     */
    SpecialLeaveMatchChannel(raw) {
        return {
            id: Packet.Client_SpecialLeaveMatchChannel, data: this.UnmarshalPacket(raw, {type: 'int32'})
        }
    }
}

module.exports = Reader;

/**
 * @typedef {Object} Packet
 * @prop {Number} id
 * @prop {UserStatus|Message|ReplayFrame|Match|MatchJoin|ScoreFrame|String|Number|Array|null} data
 */