UNPKG

@steambrew/client

Version:
289 lines (288 loc) 9.91 kB
import { OperationResponse, Unregisterable } from './shared'; /** * Represents functionality for the server browser. */ export interface ServerBrowser { /** * Adds a favorite server. * @param server The server to add. * @returns an empty string if successful, `Invalid/missing IPv4?` if failed. */ AddFavoriteServer(server: GameServer): Promise<string>; /** * Adds a favorite server by IP. * @param ip The IP to add to favorite servers. * @returns an empty string if successful, localization string if failed. */ AddFavoriteServersByIP(ip: string): Promise<string>; CancelServerQuery(dialogId: number, queryServer: number): void; /** * Connects to a server from a given dialog. * @param dialogId The dialog ID to use. * @param password Server password, empty if none. * @returns a connection status. */ ConnectToServer(dialogId: number, password: string): Promise<EJoinServerError>; /** * Creates a server info dialog for the server your friend is currently playing on. * @param pid 0 * @param steamId A Steam64 ID of a friend. */ CreateFriendGameInfoDialog(pid: number, steamId: string): void; /** * Creates a server info dialog. * @param ip The server IP. * @param port The server port. * @param queryPort * @returns the created dialog ID. */ CreateServerGameInfoDialog(ip: string, port: number, queryPort: number): Promise<number>; /** * Retrieves the server list. * @param appId The game ID, 0 for every game. * @param queryType The tab to use. * @param filters Server filters. * @param serverCallback What to do with the found server? * @param requestCompletedCallback The callback function to be called when the request is completed. * @returns the current server list request ID. * @throws Throws if the query type is unknown. * @throws Throws if the filter list isn't key/value pairs, i.e. of an even length. * @remarks Stops at 10000 if there are more servers to be found. * @example * Filter examples, may be combined: * ``` * [ 'gamedir', 'cstrike' ] // Doesn't work? * [ 'hasplayers', '1' ] // Only works with "1"? * [ 'notfull', '1' ] // Doesn't work? * [ 'map', 'cs_office' ] // Has to be an exact match! * ``` */ CreateServerListRequest(appId: number, queryType: ServerBrowserTab_t, filters: string[], serverCallback: (server: GameServer) => void, requestCompletedCallback: (response: number) => void): Promise<number | OperationResponse>; /** * Destroys the game info dialog functions (but not the window). * @param dialogId The dialog ID to use. * @remarks ServerBrowser.CancelServerQuery may throw if it tries to ping the server. */ DestroyGameInfoDialog(dialogId: number): void; /** * Stops retrieving the server list. * @param activeServerListRequestId The active server request ID to use. */ DestroyServerListRequest(activeServerListRequestId: number): void; /** * Gets a list of games that support the server browser feature. * @returns a list of games. */ GetMultiplayerGames(): Promise<ServerBrowserGame[]>; /** * Gets the server browser preferences. * @returns server browser preferences. */ GetServerListPreferences(): Promise<ServerBrowserPreferences>; /** * Pings the server of a specified dialog ID. * @param dialogId The dialog ID to use. */ PingServer(dialogId: number): Promise<number | OperationResponse>; /** * Registers a callback function to be called when a server gets added to favorite servers. * @param callback The callback function to be called. * @returns an object that can be used to unregister the callback. */ RegisterForFavorites(callback: (list: ServerBrowserFavoritesAndHistory) => void): Unregisterable; /** * Registers a callback function to be called when idk * @param dialogId The dialog ID to use. * @param callback The callback function to be called. * @returns an object that can be used to unregister the callback. */ RegisterForFriendGamePlayed(dialogId: number, callback: (server: ServerBrowserFriendServer) => void): Unregisterable; /** * Registers a callback function to be called when a server info dialog opens. * @param callback The callback function to be called. * @returns an object that can be used to unregister the callback. */ RegisterForGameInfoDialogs(callback: (dialogs: ServerBrowserDialog[]) => void): Unregisterable; /** * Registers a callback function to be called when player details get requested. * @param dialogId The dialog ID to use. * @param callback The callback function to be called. * @returns an object that can be used to unregister the callback. */ RegisterForPlayerDetails(dialogId: number, callback: (player: PlayerDetails) => void): Unregisterable; /** * Registers a callback function to be called when a server gets pinged. * @param dialogId The dialog ID to use. * @param callback The callback function to be called. * @returns an object that can be used to unregister the callback. */ RegisterForServerInfo(dialogId: number, callback: (server: GameServer) => void): Unregisterable; /** * Removes a server from favorite servers. * @param server The server to remove. */ RemoveFavoriteServer(server: GameServer): void; /** * Removes a server from history of played servers. * @param server The server to remove. */ RemoveHistoryServer(server: GameServer): void; /** * Requests player details for a specific dialog. * @param dialogId The dialog ID to use. */ RequestPlayerDetails(dialogId: number): Promise<number | OperationResponse>; /** * Sets the server browser preferences. * @param prefs Server list preferences. */ SetServerListPreferences(prefs: ServerBrowserPreferences): void; } export type ServerBrowserTab_t = 'internet' | 'favorites' | 'history' | 'lan' | 'friends'; export interface ServerBrowserGame { /** The ID of the game. */ appid: number; /** The ID of the game. */ gameid: string; /** The game folder. */ gamedir: string; /** The game's name. */ name: string; } export interface ServerBrowserPreferences { GameList: string; filters: ServerBrowserTabFilters; } export type ServerBrowserTabFilters = { [tab in ServerBrowserTab_t]: ServerBrowserGameFilter; }; export interface ServerBrowserGameFilter { /** Has users playing */ NoEmpty: boolean; /** Server not full */ NoFull: boolean; /** Is not password protected */ NoPassword: boolean; /** Anti-cheat */ Secure: EServerBrowserGameFilterAntiCheat; /** The ID of the game */ appid: number; /** The game folder */ game: string; /** Map filter */ map: string; /** Latency */ ping: EServerBrowserGameFilterPing; } export declare enum EServerBrowserGameFilterAntiCheat { All = 0, Secure = 1, NotSecure = 2 } export declare enum EServerBrowserGameFilterPing { All = 0, LessThan50 = 50, LessThan100 = 100, LessThan150 = 150, LessThan250 = 250 } export interface ServerBrowserFavoritesAndHistory { favorites: GameServer[]; history: GameServer[]; } export interface ServerBrowserFriendServer { /** The ID of the game. */ appid: number; /** Non-Steam server? */ bNonSteamServer: boolean; gameText: string; /** The ID of the game. */ gameid: string; steamIDLobby: string; } export interface ServerBrowserDialog { dialogID: number; ip: number; port: number; queryPort: number; } export interface GameServer { /** The ID of the game. */ appid: number; /** Do not refresh if had unsuccessful response? */ bDoNotRefresh?: boolean; /** Found the server? */ bHadSuccessfulResponse: boolean; /** Has password? */ bPassword: boolean; /** Is VAC secured? */ bSecure: boolean; /** How many bot players there currently are. */ botPlayers: number; /** The server's game name/description. */ gameDesc: string; /** The game folder. */ gameDir: string; /** Server tags, separated by a comma. */ gameTags: string; /** The server IP. */ ip: string; /** Last time played as a UNIX timestamp. */ lastPlayed: number; /** Current server map. */ map: string; /** Max players on the server. */ maxPlayers: number; /** The server name. */ name: string; /** The latency to the server. */ ping: number; /** How many players there currently are. */ players: number; /** The server port. */ port: number; queryPort: number; /** The server's game version it is running on. */ serverVersion: number; /** Game server account ID. */ steamID: string; } export declare enum EJoinServerError { PingFailed = -3, Connecting = -2, Pinging = -1, None = 0, VACBanned = 1, ServerFull = 2, ModNotInstalled = 3, AppNotFound = 4, NotInitialized = 5 } export interface PlayerDetails { /** * `true` is the server refresh is successful. */ bSuccess: boolean; /** * `true` when the server refresh is done. */ bRefreshComplete: boolean; /** * Player name. * * @note Defined when {@link bRefreshComplete} is `true`. */ playerName?: string; /** * Player score. * * @note Defined when {@link bRefreshComplete} is `true`. */ score?: number; /** * Time played on the server in seconds * * @note Defined when {@link bRefreshComplete} is `true`. */ timePlayed?: number; }