feat: update Avatar Mixer connection logic to use known address and correct node type for clients

This commit is contained in:
MayaTheShy
2025-11-09 23:11:38 -05:00
parent 6ad9f0e1fb
commit f22e95e1b1

View File

@@ -1134,12 +1134,17 @@ void OverteClient::handleDomainListReply(const char* data, size_t len) {
std::cout << "[OverteClient] Parsed " << m_assignmentClients.size() << " assignment clients" << std::endl;
// TEMPORARY HACK: If no Avatar Mixer found, try the known port from web UI
// TEMPORARY HACK: If no Avatar Mixer found, try the known address from web UI
if (m_avatarMixerPort == 0) {
std::cout << "[OverteClient] No Avatar Mixer in DomainList, trying known port 57460..." << std::endl;
m_avatarMixerAddr = m_udpAddr;
sockaddr_in* addr = reinterpret_cast<sockaddr_in*>(&m_avatarMixerAddr);
addr->sin_port = htons(57460); // From screenshot
std::cout << "[OverteClient] No Avatar Mixer in DomainList, trying known address 192.168.2.2:57460..." << std::endl;
// Create sockaddr for Avatar Mixer (NOT the same as domain server!)
sockaddr_in avatarAddr{};
avatarAddr.sin_family = AF_INET;
avatarAddr.sin_port = htons(57460);
inet_pton(AF_INET, "192.168.2.2", &avatarAddr.sin_addr);
memcpy(&m_avatarMixerAddr, &avatarAddr, sizeof(avatarAddr));
m_avatarMixerAddrLen = sizeof(sockaddr_in);
m_avatarMixerPort = 57460;
m_avatarMixerConnected = true;
@@ -1218,7 +1223,10 @@ void OverteClient::sendDomainConnectRequest() {
qs.writeUInt64BE(static_cast<uint64_t>(nowUs));
// 9. Node type / owner type (NodeType_t)
qs.writeUInt8(static_cast<uint8_t>('I')); // Agent
// Use Unassigned (1) for regular clients, NOT 'I' (Agent)!
// NodeType::Agent = 'I' is for server-side bots/scripts
// NodeType::Unassigned = 1 is for regular Interface clients
qs.writeUInt8(1); // Unassigned = regular client
// Determine local UDP socket address/port (bind address if needed)
uint32_t localIPv4 = 0x7F000001; // 127.0.0.1 fallback