Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
@onmuga/sdk
Advanced tools
Onmuga client SDK
<script src="https://unpkg.com/@onmuga/sdk@0.0.7"></script>
The SdkClient will be available as window.onmuga.SdkClient
Install the npm package
npm install --save @onmuga/sdk
Load into your project
// Using ES6 imports
import SdkClient from '@onmuga/sdk';
// Or, using require
var SdkClient = require('@onmuga/sdk');
// Initialize the SDK client for your game
const sdk = new SdkClient({
apiKey: 'YOUR_API_KEY_HERE',
game: 'yourgame',
});
sdk.on('gameStateChanged', (stateKey, state) => {
// Re-render your app with new game state
});
sdk.on('usersChanged', (users) => {
// You may want to re-render your user list here
users.forEach(user => {
// user == {
// connected: true,
// id: "ly3YHy5GZ9Pw",
// username: "foo"
// }
});
});
// Check if a username exists already from a previous sesssion
let username = sdk.getUsername();
if (!username) {
username = window.prompt('Select a username');
sdk.setUsername(username);
}
// Up to you to decide on how room IDs are stored in URL, then extract them appropriately
let roomId = getRoomFromUrl(window.location);
if (!roomId) {
roomId = window.prompt('Enter a room ID or leave blank to create a new room');
}
if (!roomId) {
sdk.createRoom(username).then(onJoinRoom);
} else {
sdk.joinRoom(roomId, username).then(onJoinRoom);
}
function onJoinRoom(response) {
console.log(`Joined room ${response.roomId}`);
// We'll update game state here for illustrative purposes
sdk.updateGameState('default', {
...sdk.getGameState('default'),
newestUser: username,
});
}
new SdkClient(options)
Constructs a new SDK client. Your game should likely just contain one global instance of this.
options
apiKey
- Onmuga platform public API key provided to you (string, required)game
- Lowercase idenitifer for your game e.g. "battle-snake" (string, required)sdk.getRoom(): string|null
Return the room ID that the user is currently connected to
sdk.getUsername(): string|null
Return the current user's username (set via joinRoom
or setUsername
)
sdk.setUsername(username: string): Promise
Update the current user's username.
Returns a promise that will be rejected with an Error if the username was rejected for any reason.
sdk.getUserId(): string|null
Return the user ID associated with the user when they joined the room
sdk.getUsers(): User[]
Return the users in the current room. Each User
has the following properties:
id
- stringusername
- stringconnected
- boolean, whether the user is currently connectedsdk.getUserById(id: string): User|undefined
Return the specified User
if they exist in the room. See getUsers
for User
shape.
sdk.createRoom(username?: string): Promise
Creates a new room, and adds the current user.
If username is not provided, the sdk will try using (1) any username from a previous setUsername(...)
call, (2) username from a previous session, or (3) an auto-generated username like "RedSloth4".
Returns a promise that will be rejected in case of an error.
sdk.checkRoom(roomId: string): Promise<{success: boolean}>
Checks if a room with the given ID exists
Returns a promise that resolves to an object with the following properties:
success
- boolean, true
if room exists, false
otherwisesdk.joinRoom(roomId: string, username?: string): Promise
Joins the specified room.
If username is not provided, the sdk will try using (1) any username from a previous setUsername(...)
call, (2) username from a previous session, or (3) an auto-generated username like "RedSloth4".
Returns a promise that will be rejected in case of an error joining the room.
sdk.getAllGameStates(): Object
Your game can have multiple states associated with it, each keyed by a unique string. This allows you to surgically update certain aspects of your game, without constantly re-rendering the whole game when the game state changes.
The schema of each state object is fully controlled by the developer.
sdk.getGameState(stateKey: string): Object
Return a specific game state object. The schema of these state objects is fully controlled by the developer.
stateKey
- The game state object to retrieve
sdk.updateGameState(stateKey: string, state: Object): Promise
Update the game state for the specific key. State is a plain javascript object that the developer has full control over.
The server will then emit a gameStateChanged
event for all users in the room.
Returns a promise that will be rejected in case of an error.
sdk.joinRoom(roomId: string, username?: string): Promise
Joins the specified room.
If username is not provided, it will use any username set in a previous session, or by an earlier setUsername
call.
Returns a promise that will be rejected in case of an error joining the room.
sdk.on(eventName: string, callback: fn)
Listen to events emitted by the SDK, see event reference below
Callback may be passed data associated with the event
sdk.once(eventName: string, callback: fn)
Listen to an event one time – immediately removing the listener afterwards.
sdk.off(eventName: string, callback: fn)
Remove the specified listener for the specified event
sdk.broadcast(eventName: string, data?: JsonSerializable): Promise
Broadcast an arbitrary event (i.e. playerCheated
) to every other user in the game. You can use sdk.on
to listen for these messages.
Returns a promise that will be rejected in case of an error.
sdk.message(userId: string, eventName: string, data?: JsonSerializable): Promise
Broadcast an arbitrary event (i.e. playerCheated
) to a specific user in the game.
Returns a promise that will be rejected in case of an error.
sdk.now(): number
Sometimes in games you may need to compare timestamps generated on different players devices (for example, to figure out which player took an action first). This can be problematic because the system clock on some player's devices is occasionally a couple minutes fast or slow.
Instead of using a native JS Date
, you should use the now()
method. This returns a unix epoch timestamp that is roughly synchronized to server time and will help achieve consistency across clients.
sdk.serverToClientTime(serverTime): number
Converts a timestamp returned by now()
back into a timestamp that can be compared with the clients system time.
You can listen to these events using sdk.on/off(...)
gameStateChanged
The game state was updated by some user in the room (possibly the current user!)
Listeners are invoked with the following arguments:
stateKey: string
- The state key associated with this game state (e.g. 'default'
)gameState: object
- The updated game state objectprevState: object
- The previous game state object held by the client, useful for comparisonsourceUserId: string
- ID of the user who triggered this state updateusersChanged
The list of users in the room has changed, either users joined or left or their metadata changed.
Listeners are passed an array of User
objects (see getUsers()
above for shape)
invalidApiKey
Will be emitted if the API key you used to construct SdkClient
is invalid, or if the current hostname is unsupported.
FAQs
SDK for the Onmuga multi-player game platform
The npm package @onmuga/sdk receives a total of 0 weekly downloads. As such, @onmuga/sdk popularity was classified as not popular.
We found that @onmuga/sdk demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.