Skip to content

Commit

Permalink
add lobby call
Browse files Browse the repository at this point in the history
add code for lobby call auth

add set tags

update tags

add set tags
  • Loading branch information
Ughuuu committed Dec 7, 2024
1 parent e866b0b commit b42a5f2
Show file tree
Hide file tree
Showing 12 changed files with 282 additions and 45 deletions.
3 changes: 3 additions & 0 deletions modules/blazium_sdk/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ def get_doc_classes():
"ListLobbyResult",
"ViewLobbyResponse",
"ViewLobbyResult",
"AuthoritativeClient",
"LobbyCallResponse",
"LobbyCallResult",
]


Expand Down
24 changes: 24 additions & 0 deletions modules/blazium_sdk/doc_classes/AuthoritativeClient.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AuthoritativeClient" inherits="LobbyClient" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
<brief_description>
A lobby client that is authoritative.
</brief_description>
<description>
A lobby client that is authoritative.
</description>
<tutorials>
</tutorials>
<methods>
<method name="lobby_call">
<return type="LobbyCallResponse" />
<param index="0" name="method" type="String" />
<param index="1" name="args" type="Array" />
<description>
Call a method on the server.
</description>
</method>
</methods>
<members>
<member name="server_url" type="String" setter="set_server_url" getter="get_server_url" overrides="LobbyClient" default="&quot;wss://authlobby.blazium.app/connect&quot;" />
</members>
</class>
19 changes: 19 additions & 0 deletions modules/blazium_sdk/doc_classes/LobbyCallResponse.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="LobbyCallResponse" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
<brief_description>
Response from a lobby call function.
</brief_description>
<description>
Response from a lobby call function. Await on finished to get the [LobbyCallResult].
</description>
<tutorials>
</tutorials>
<signals>
<signal name="finished">
<param index="0" name="result" type="LobbyCallResult" />
<description>
Signal emitted when the request is finished.
</description>
</signal>
</signals>
</class>
30 changes: 30 additions & 0 deletions modules/blazium_sdk/doc_classes/LobbyCallResult.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="LobbyCallResult" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
<brief_description>
A result from a [LobbyCallResponse].
</brief_description>
<description>
A result from a [LobbyCallResponse].
</description>
<tutorials>
</tutorials>
<methods>
<method name="get_result" qualifiers="const">
<return type="Variant" />
<description>
Result of the function call.
</description>
</method>
<method name="has_error" qualifiers="const">
<return type="bool" />
<description>
Returns true if there is an error.
</description>
</method>
</methods>
<members>
<member name="error" type="String" setter="" getter="get_error" default="&quot;&quot;">
Gets the error message.
</member>
</members>
</class>
38 changes: 25 additions & 13 deletions modules/blazium_sdk/doc_classes/LobbyClient.xml
Original file line number Diff line number Diff line change
@@ -1,43 +1,45 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="LobbyClient" inherits="BlaziumClient" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
<brief_description>
A node used to connect to a blazium lobby websocket server.
A node used to connect to a lobby server.
</brief_description>
<description>
A node used to connect to a lobby server. It can be used to do matchmaking. You care do operations such as create lobbys, join lobbys, etc.
A node used to connect to a lobby server. It can be used to do matchmaking. You can do operations such as create lobby, join lobby, etc. The server is configurable and can either be self deployed or you can use the blazium free matchmaking server.
</description>
<tutorials>
</tutorials>
<methods>
<method name="connect_to_lobby">
<return type="bool" />
<description>
Connect to a Blazium Lobby Server using the game_id and [member server_url].
Connect to a Blazium Lobby Server using the [member game_id] and [member server_url].
</description>
</method>
<method name="create_lobby">
<return type="ViewLobbyResponse" />
<param index="0" name="title" type="String" />
<param index="1" name="tags" type="String[]" default="[]" />
<param index="1" name="tags" type="Dictionary" default="{}" />
<param index="2" name="max_players" type="int" default="4" />
<param index="3" name="password" type="String" default="&quot;&quot;" />
<description>
Create a lobby and become host. If you are already in a lobby, you cannot create one. You need to leave first.
The new lobby can have a title, tags, max players and password.
Generates [signal lobby_created] signal.
</description>
</method>
<method name="is_host">
<return type="bool" />
<description>
Returns true if you are the host.
Returns true if you are the host of the current lobby.
</description>
</method>
<method name="join_lobby">
<return type="ViewLobbyResponse" />
<param index="0" name="lobby_id" type="String" />
<param index="1" name="password" type="String" default="&quot;&quot;" />
<description>
Joint a lobby. If you are already in a lobby, you cannot join another one. You need to leave first.
Join a lobby. If you are already in a lobby, you cannot join another one. You need to leave first.
If the lobby you want to join is password protected, you need to provide the password.
Generates [signal lobby_joined].
</description>
</method>
Expand All @@ -58,20 +60,18 @@
</method>
<method name="list_lobbies">
<return type="ListLobbyResponse" />
<param index="0" name="title" type="String" default="&quot;&quot;" />
<param index="1" name="max_players" type="int" default="-1" />
<param index="2" name="tags" type="String[]" default="[]" />
<param index="3" name="start" type="int" default="0" />
<param index="4" name="count" type="int" default="10" />
<param index="0" name="tags" type="Dictionary" default="{}" />
<param index="1" name="start" type="int" default="0" />
<param index="2" name="count" type="int" default="10" />
<description>
Lists all lobbies.
Lists all lobbies. Lobbies that are sealed won't show in the list, except if you disconnected and trying to reconnect to a lobby.
</description>
</method>
<method name="send_chat_message">
<return type="LobbyResponse" />
<param index="0" name="chat_message" type="String" />
<description>
Send a chat message.
Send a chat message. Only works if you are in a lobby.
Generates [signal peer_messaged].
</description>
</method>
Expand Down Expand Up @@ -108,6 +108,12 @@
Generates [signal lobby_sealed].
</description>
</method>
<method name="set_lobby_tags">
<return type="LobbyResponse" />
<param index="0" name="tags" type="Dictionary" />
<description>
</description>
</method>
<method name="set_peer_name">
<return type="LobbyResponse" />
<param index="0" name="peer_name" type="String" />
Expand Down Expand Up @@ -187,6 +193,12 @@
Signal generated after the host seals the lobby.
</description>
</signal>
<signal name="lobby_tagged">
<param index="0" name="tags" type="Dictionary" />
<description>
Signal generated after the host updated the tags of the lobby
</description>
</signal>
<signal name="log_updated">
<param index="0" name="command" type="String" />
<param index="1" name="logs" type="String" />
Expand Down
2 changes: 1 addition & 1 deletion modules/blazium_sdk/doc_classes/LobbyInfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<member name="sealed" type="bool" setter="" getter="is_sealed" default="false">
Whether the lobby is sealed.
</member>
<member name="tags" type="String[]" setter="" getter="get_tags" default="[]">
<member name="tags" type="Dictionary" setter="" getter="get_tags" default="{}">
The tags of the lobby. Used for listing lobbies to filter based on them.
</member>
</members>
Expand Down
1 change: 1 addition & 0 deletions modules/blazium_sdk/icons/AuthoritativeClient.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 26 additions & 0 deletions modules/blazium_sdk/lobby/authoritative_client.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "authoritative_client.h"

Ref<AuthoritativeClient::LobbyCallResponse> AuthoritativeClient::lobby_call(const String &p_method, const Array &p_args) {
String id = _increment_counter();
Dictionary command;
command["command"] = "lobby_call";
Dictionary data_dict;
data_dict["function"] = p_method;
data_dict["inputs"] = p_args;
command["data"] = data_dict;
Array command_array;
Ref<LobbyCallResponse> response;
response.instantiate();
command_array.push_back(LobbyClient::LOBBY_CALL);
command_array.push_back(response);
_commands[id] = command_array;
_send_data(command);
return response;
}

void AuthoritativeClient::_bind_methods() {
ClassDB::bind_method(D_METHOD("lobby_call", "method", "args"), &AuthoritativeClient::lobby_call);
ADD_PROPERTY_DEFAULT("peers", TypedArray<LobbyPeer>());
ADD_PROPERTY_DEFAULT("peer", Ref<LobbyPeer>());
ADD_PROPERTY_DEFAULT("lobby", Ref<LobbyInfo>());
}
83 changes: 83 additions & 0 deletions modules/blazium_sdk/lobby/authoritative_client.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/**************************************************************************/
/* lobby_client.h */
/**************************************************************************/
/* This file is part of: */
/* BLAZIUM ENGINE */
/* https://blazium.app */
/**************************************************************************/
/* Copyright (c) 2024-present Blazium Engine contributors. */
/* Copyright (c) 2024 Dragos Daian, Randolph William Aarseth II. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/

#ifndef AUTHORITATIVE_CLIENT_H
#define AUTHORITATIVE_CLIENT_H

#include "lobby_client.h"

class AuthoritativeClient : public LobbyClient {
GDCLASS(AuthoritativeClient, LobbyClient);

public:
class LobbyCallResponse : public RefCounted {
GDCLASS(LobbyCallResponse, RefCounted);

protected:
static void _bind_methods() {
ADD_SIGNAL(MethodInfo("finished", PropertyInfo(Variant::OBJECT, "result", PROPERTY_HINT_RESOURCE_TYPE, "LobbyCallResult")));
}

public:
class LobbyCallResult : public RefCounted {
GDCLASS(LobbyCallResult, RefCounted);
Variant result;
String error;

protected:
static void _bind_methods() {
ClassDB::bind_method(D_METHOD("has_error"), &LobbyCallResult::has_error);
ClassDB::bind_method(D_METHOD("get_error"), &LobbyCallResult::get_error);
ClassDB::bind_method(D_METHOD("get_result"), &LobbyCallResult::get_result);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "error"), "", "get_error");
}

public:
void set_error(String p_error) { this->error = p_error; }
void set_result(Variant p_result) { this->result = p_result; }

bool has_error() const { return !error.is_empty(); }
String get_error() const { return error; }
Variant get_result() const { return result; }
};
};

protected:
static void _bind_methods();

public:
Ref<LobbyCallResponse> lobby_call(const String &p_method, const Array &p_args);

AuthoritativeClient() {
server_url = "wss://authlobby.blazium.app/connect";
}
};

#endif // AUTHORITATIVE_CLIENT_H
Loading

0 comments on commit b42a5f2

Please sign in to comment.