Add bdMatchmaking
This commit is contained in:
parent
301fcf5f76
commit
1b5c4234dd
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "byte_buffer.hpp"
|
||||
#include "game/structs.hpp"
|
||||
|
||||
namespace demonware
|
||||
{
|
||||
@ -265,4 +266,225 @@ namespace demonware
|
||||
buffer->read_string(&this->filename);
|
||||
}
|
||||
};
|
||||
|
||||
class bdPerformanceValue final : public bdTaskResult
|
||||
{
|
||||
public:
|
||||
uint64_t user_id;
|
||||
int64_t performance;
|
||||
|
||||
void serialize(byte_buffer* buffer) override
|
||||
{
|
||||
buffer->write_uint64(this->user_id);
|
||||
buffer->write_int64(this->performance);
|
||||
}
|
||||
|
||||
void deserialize(byte_buffer* buffer) override
|
||||
{
|
||||
buffer->read_uint64(&this->user_id);
|
||||
buffer->read_int64(&this->performance);
|
||||
}
|
||||
};
|
||||
|
||||
struct bdSockAddr final
|
||||
{
|
||||
bdSockAddr() : in_un(), m_family(AF_INET)
|
||||
{
|
||||
}
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
char m_b1;
|
||||
char m_b2;
|
||||
char m_b3;
|
||||
char m_b4;
|
||||
} m_caddr;
|
||||
|
||||
unsigned int m_iaddr;
|
||||
|
||||
struct
|
||||
{
|
||||
unsigned __int16 m_w1;
|
||||
unsigned __int16 m_w2;
|
||||
unsigned __int16 m_w3;
|
||||
unsigned __int16 m_w4;
|
||||
unsigned __int16 m_w5;
|
||||
unsigned __int16 m_w6;
|
||||
unsigned __int16 m_w7;
|
||||
unsigned __int16 m_w8;
|
||||
} m_caddr6;
|
||||
|
||||
char m_iaddr6[16];
|
||||
char m_sockaddr_storage[128];
|
||||
} in_un;
|
||||
|
||||
unsigned __int16 m_family;
|
||||
};
|
||||
|
||||
struct bdInetAddr final : bdTaskResult
|
||||
{
|
||||
bdSockAddr m_addr;
|
||||
|
||||
bool is_valid() const
|
||||
{
|
||||
return (this->m_addr.m_family == AF_INET /*|| this->m_addr.m_family == AF_INET6*/);
|
||||
}
|
||||
|
||||
void serialize(byte_buffer* buffer) override
|
||||
{
|
||||
const auto data_types = buffer->is_using_data_types();
|
||||
buffer->set_use_data_types(false);
|
||||
|
||||
if (this->m_addr.m_family == AF_INET)
|
||||
{
|
||||
buffer->write(4, &this->m_addr.in_un.m_caddr);
|
||||
}
|
||||
|
||||
buffer->set_use_data_types(data_types);
|
||||
}
|
||||
|
||||
void deserialize(byte_buffer* buffer) override
|
||||
{
|
||||
const auto data_types = buffer->is_using_data_types();
|
||||
buffer->set_use_data_types(false);
|
||||
|
||||
if (this->m_addr.m_family == AF_INET)
|
||||
{
|
||||
buffer->read(4, &this->m_addr.in_un.m_caddr);
|
||||
}
|
||||
|
||||
buffer->set_use_data_types(data_types);
|
||||
}
|
||||
};
|
||||
|
||||
struct bdAddr final : bdTaskResult
|
||||
{
|
||||
bdInetAddr m_address;
|
||||
unsigned __int16 m_port{};
|
||||
|
||||
void serialize(byte_buffer* buffer) override
|
||||
{
|
||||
const bool data_types = buffer->is_using_data_types();
|
||||
buffer->set_use_data_types(false);
|
||||
|
||||
this->m_address.serialize(buffer);
|
||||
buffer->write_uint16(this->m_port);
|
||||
|
||||
buffer->set_use_data_types(data_types);
|
||||
}
|
||||
|
||||
void deserialize(byte_buffer* buffer) override
|
||||
{
|
||||
const auto data_types = buffer->is_using_data_types();
|
||||
buffer->set_use_data_types(false);
|
||||
|
||||
this->m_address.deserialize(buffer);
|
||||
buffer->read_uint16(&this->m_port);
|
||||
|
||||
buffer->set_use_data_types(data_types);
|
||||
}
|
||||
};
|
||||
|
||||
struct bdCommonAddr : bdTaskResult
|
||||
{
|
||||
bdAddr m_local_addrs[5];
|
||||
bdAddr m_public_addr;
|
||||
game::bdNATType m_nat_type;
|
||||
unsigned int m_hash;
|
||||
bool m_is_loopback;
|
||||
|
||||
void serialize(byte_buffer* buffer) override
|
||||
{
|
||||
const auto data_types = buffer->is_using_data_types();
|
||||
buffer->set_use_data_types(false);
|
||||
|
||||
auto valid = true;
|
||||
for (uint32_t i = 0; i < 5 && i < ARRAYSIZE(this->m_local_addrs) && valid; ++i)
|
||||
{
|
||||
this->m_local_addrs[i].serialize(buffer);
|
||||
valid = this->m_local_addrs[i].m_address.is_valid();
|
||||
}
|
||||
|
||||
if (valid)
|
||||
{
|
||||
this->m_public_addr.serialize(buffer);
|
||||
buffer->write_byte(this->m_nat_type);
|
||||
}
|
||||
|
||||
buffer->set_use_data_types(data_types);
|
||||
}
|
||||
|
||||
void deserialize(byte_buffer* buffer) override
|
||||
{
|
||||
const auto data_types = buffer->is_using_data_types();
|
||||
buffer->set_use_data_types(false);
|
||||
|
||||
auto valid = true;
|
||||
for (uint32_t i = 0; i < ARRAYSIZE(this->m_local_addrs) && valid; ++i)
|
||||
{
|
||||
bdAddr addr;
|
||||
addr.deserialize(buffer);
|
||||
this->m_local_addrs[i] = addr;
|
||||
valid = this->m_local_addrs[i].m_address.is_valid();
|
||||
}
|
||||
|
||||
if (valid)
|
||||
{
|
||||
this->m_public_addr.deserialize(buffer);
|
||||
buffer->read_ubyte(reinterpret_cast<uint8_t*>(&this->m_nat_type));
|
||||
}
|
||||
|
||||
buffer->set_use_data_types(data_types);
|
||||
}
|
||||
};
|
||||
|
||||
class bdSessionID final : public bdTaskResult
|
||||
{
|
||||
public:
|
||||
uint64_t session_id;
|
||||
|
||||
void serialize(byte_buffer* buffer) override
|
||||
{
|
||||
buffer->write_blob(LPSTR(&this->session_id), sizeof this->session_id);
|
||||
}
|
||||
|
||||
void deserialize(byte_buffer* buffer) override
|
||||
{
|
||||
int size{};
|
||||
char* data{};
|
||||
buffer->read_blob(&data, &size);
|
||||
|
||||
if (data && uint32_t(size) >= sizeof(this->session_id))
|
||||
{
|
||||
this->session_id = *reinterpret_cast<uint64_t*>(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class bdMatchMakingInfo final : bdTaskResult
|
||||
{
|
||||
bdSessionID m_sessionID;
|
||||
std::string m_hostAddr;
|
||||
uint32_t m_gameType;
|
||||
uint32_t m_maxPlayers;
|
||||
uint32_t m_numPlayers;
|
||||
|
||||
void serialize(byte_buffer* buffer) override
|
||||
{
|
||||
buffer->write_blob(this->m_hostAddr);
|
||||
this->m_sessionID.serialize(buffer);
|
||||
buffer->write_uint32(this->m_gameType);
|
||||
buffer->write_uint32(this->m_maxPlayers);
|
||||
buffer->write_uint32(this->m_numPlayers);
|
||||
}
|
||||
|
||||
void deserialize(byte_buffer* buffer) override
|
||||
{
|
||||
buffer->read_blob(&this->m_hostAddr);
|
||||
buffer->read_uint32(&this->m_gameType);
|
||||
buffer->read_uint32(&this->m_maxPlayers);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -1,129 +1,78 @@
|
||||
#include <std_include.hpp>
|
||||
#include "../services.hpp"
|
||||
#include "steam/steam.hpp"
|
||||
|
||||
namespace demonware
|
||||
{
|
||||
bdMatchMaking::bdMatchMaking() : service(138, "bdMatchMaking")
|
||||
bdMatchMaking::bdMatchMaking() : service(21, "bdMatchMaking")
|
||||
{
|
||||
this->register_task(1, &bdMatchMaking::createSession);
|
||||
this->register_task(2, &bdMatchMaking::updateSession);
|
||||
this->register_task(3, &bdMatchMaking::deleteSession);
|
||||
this->register_task(4, &bdMatchMaking::findSessionFromID);
|
||||
this->register_task(5, &bdMatchMaking::findSessions);
|
||||
this->register_task(6, &bdMatchMaking::notifyJoin);
|
||||
this->register_task(8, &bdMatchMaking::inviteToSession);
|
||||
this->register_task(9, &bdMatchMaking::submitPerformance);
|
||||
this->register_task(10, &bdMatchMaking::getPerformanceValues);
|
||||
this->register_task(11, &bdMatchMaking::getSessionInvites);
|
||||
this->register_task(12, &bdMatchMaking::updateSessionPlayers);
|
||||
this->register_task(13, &bdMatchMaking::findSessionsPaged);
|
||||
this->register_task(14, &bdMatchMaking::findSessionsByEntityIDs);
|
||||
this->register_task(15, &bdMatchMaking::findSessionsFromIDs);
|
||||
this->register_task(16, &bdMatchMaking::findSessionsTwoPass);
|
||||
this->register_task(1, &bdMatchMaking::create_session);
|
||||
this->register_task(2, &bdMatchMaking::update_session);
|
||||
this->register_task(3, &bdMatchMaking::delete_session);
|
||||
this->register_task(5, &bdMatchMaking::find_sessions);
|
||||
this->register_task(10, &bdMatchMaking::get_performance);
|
||||
}
|
||||
|
||||
void bdMatchMaking::createSession(service_server* server, byte_buffer* /*buffer*/) const
|
||||
void bdMatchMaking::create_session(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto* id = new bdSessionID;
|
||||
id->session_id = steam::SteamUser()->GetSteamID().bits;
|
||||
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->add(id);
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::update_session(service_server* server, byte_buffer* buffer) const
|
||||
{
|
||||
/*MatchMakingInfo mmInfo;
|
||||
mmInfo.session_id.deserialize(buffer);
|
||||
mmInfo.deserialize(buffer);
|
||||
|
||||
byte_buffer out_data;
|
||||
mmInfo.symmetric = true;
|
||||
mmInfo.serialize(&out_data);
|
||||
|
||||
byte_buffer addr_buf(mmInfo.host_addr);
|
||||
bdCommonAddr addr;
|
||||
addr.deserialize(&addr_buf);*/
|
||||
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::updateSession(service_server* server, byte_buffer* /*buffer*/) const
|
||||
void bdMatchMaking::delete_session(service_server* server, byte_buffer* buffer) const
|
||||
{
|
||||
// TODO:
|
||||
bdSessionID id;
|
||||
id.deserialize(buffer);
|
||||
|
||||
byte_buffer out_data;
|
||||
id.serialize(&out_data);
|
||||
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::deleteSession(service_server* server, byte_buffer* /*buffer*/) const
|
||||
void bdMatchMaking::get_performance(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto* result = new bdPerformanceValue;
|
||||
result->user_id = steam::SteamUser()->GetSteamID().bits;
|
||||
result->performance = 10;
|
||||
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->add(result);
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::findSessionFromID(service_server* server, byte_buffer* /*buffer*/) const
|
||||
void bdMatchMaking::find_sessions(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::findSessions(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
//for (auto& session : sessions)
|
||||
{
|
||||
//reply->add(session.second);
|
||||
}
|
||||
|
||||
void bdMatchMaking::getPerformanceValues(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::getSessionInvites(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::updateSessionPlayers(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::submitPerformance(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::notifyJoin(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::inviteToSession(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::findSessionsPaged(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::findSessionsByEntityIDs(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::findSessionsFromIDs(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
|
||||
void bdMatchMaking::findSessionsTwoPass(service_server* server, byte_buffer* /*buffer*/) const
|
||||
{
|
||||
// TODO:
|
||||
auto reply = server->create_reply(this->task_id());
|
||||
reply->send();
|
||||
}
|
||||
}
|
||||
|
@ -8,20 +8,10 @@ namespace demonware
|
||||
bdMatchMaking();
|
||||
|
||||
private:
|
||||
void createSession(service_server* server, byte_buffer* buffer) const;
|
||||
void updateSession(service_server* server, byte_buffer* buffer) const;
|
||||
void deleteSession(service_server* server, byte_buffer* buffer) const;
|
||||
void findSessionFromID(service_server* server, byte_buffer* buffer) const;
|
||||
void findSessions(service_server* server, byte_buffer* buffer) const;
|
||||
void inviteToSession(service_server* server, byte_buffer* buffer) const;
|
||||
void submitPerformance(service_server* server, byte_buffer* buffer) const;
|
||||
void notifyJoin(service_server* server, byte_buffer* buffer) const;
|
||||
void getPerformanceValues(service_server* server, byte_buffer* buffer) const;
|
||||
void getSessionInvites(service_server* server, byte_buffer* buffer) const;
|
||||
void updateSessionPlayers(service_server* server, byte_buffer* buffer) const;
|
||||
void findSessionsPaged(service_server* server, byte_buffer* buffer) const;
|
||||
void findSessionsByEntityIDs(service_server* server, byte_buffer* buffer) const;
|
||||
void findSessionsFromIDs(service_server* server, byte_buffer* buffer) const;
|
||||
void findSessionsTwoPass(service_server* server, byte_buffer* buffer) const;
|
||||
void create_session(service_server* server, byte_buffer* buffer) const;
|
||||
void update_session(service_server* server, byte_buffer* buffer) const;
|
||||
void delete_session(service_server* server, byte_buffer* buffer) const;
|
||||
void get_performance(service_server* server, byte_buffer* buffer) const;
|
||||
void find_sessions(service_server* server, byte_buffer* buffer) const;
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user