mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 07:24:59 +02:00
bust TreeNode out into seperate class
This commit is contained in:
parent
ff4527904f
commit
3d874357d7
3 changed files with 60 additions and 30 deletions
19
space/src/TreeNode.cpp
Normal file
19
space/src/TreeNode.cpp
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
//
|
||||||
|
// TreeNode.cpp
|
||||||
|
// hifi
|
||||||
|
//
|
||||||
|
// Created by Stephen Birarda on 2/13/13.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "TreeNode.h"
|
||||||
|
|
||||||
|
std::string EMPTY_STRING = "";
|
||||||
|
|
||||||
|
TreeNode::TreeNode() {
|
||||||
|
for (int i = 0; i < CHILDREN_PER_NODE; ++i) {
|
||||||
|
child[i] = NULL;
|
||||||
|
}
|
||||||
|
hostname = &EMPTY_STRING;
|
||||||
|
nickname = &EMPTY_STRING;
|
||||||
|
}
|
26
space/src/TreeNode.h
Normal file
26
space/src/TreeNode.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
//
|
||||||
|
// TreeNode.h
|
||||||
|
// hifi
|
||||||
|
//
|
||||||
|
// Created by Stephen Birarda on 2/13/13.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef __hifi__TreeNode__
|
||||||
|
#define __hifi__TreeNode__
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
const int CHILDREN_PER_NODE = 8;
|
||||||
|
|
||||||
|
class TreeNode {
|
||||||
|
public:
|
||||||
|
TreeNode();
|
||||||
|
|
||||||
|
TreeNode *child[CHILDREN_PER_NODE];
|
||||||
|
std::string *hostname;
|
||||||
|
std::string *nickname;
|
||||||
|
int domain_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* defined(__hifi__TreeNode__) */
|
|
@ -24,36 +24,21 @@
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
|
#include "TreeNode.h"
|
||||||
|
|
||||||
const int CHILDREN_PER_NODE = 8;
|
|
||||||
const char *CONFIG_FILE = "/etc/below92/spaceserver.data.txt";
|
const char *CONFIG_FILE = "/etc/below92/spaceserver.data.txt";
|
||||||
const int UDP_PORT = 55551;
|
const int UDP_PORT = 55551;
|
||||||
std::vector< std::vector<std::string> > configData;
|
std::vector< std::vector<std::string> > configData;
|
||||||
sockaddr_in address, destAddress;
|
sockaddr_in address, destAddress;
|
||||||
socklen_t destLength = sizeof(destAddress);
|
socklen_t destLength = sizeof(destAddress);
|
||||||
|
|
||||||
std::string EMPTY_STRING = "";
|
|
||||||
|
|
||||||
std::string ROOT_HOSTNAME = "root.highfidelity.co";
|
std::string ROOT_HOSTNAME = "root.highfidelity.co";
|
||||||
std::string ROOT_NICKNAME = "root";
|
std::string ROOT_NICKNAME = "root";
|
||||||
std::string *LAST_KNOWN_HOSTNAME = new std::string();
|
std::string *LAST_KNOWN_HOSTNAME = new std::string();
|
||||||
|
|
||||||
class treeNode {
|
const short PACKET_LENGTH_BYTES = 1024;
|
||||||
public:
|
|
||||||
treeNode *child[CHILDREN_PER_NODE];
|
|
||||||
std::string *hostname;
|
|
||||||
std::string *nickname;
|
|
||||||
int domain_id;
|
|
||||||
treeNode() {
|
|
||||||
for (int i = 0; i < CHILDREN_PER_NODE; ++i) {
|
|
||||||
child[i] = NULL;
|
|
||||||
}
|
|
||||||
hostname = &EMPTY_STRING;
|
|
||||||
nickname = &EMPTY_STRING;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
treeNode rootNode;
|
TreeNode rootNode;
|
||||||
|
|
||||||
void printBinaryValue(char element) {
|
void printBinaryValue(char element) {
|
||||||
std::bitset<8> x(element);
|
std::bitset<8> x(element);
|
||||||
|
@ -90,13 +75,13 @@ int network_init()
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
treeNode *findOrCreateNode(unsigned long lengthInBits,
|
TreeNode *findOrCreateNode(unsigned long lengthInBits,
|
||||||
unsigned char *addressBytes,
|
unsigned char *addressBytes,
|
||||||
std::string *hostname,
|
std::string *hostname,
|
||||||
std::string *nickname,
|
std::string *nickname,
|
||||||
int domain_id) {
|
int domain_id) {
|
||||||
|
|
||||||
treeNode *currentNode = &rootNode;
|
TreeNode *currentNode = &rootNode;
|
||||||
|
|
||||||
for (int i = 0; i < lengthInBits; i += 3) {
|
for (int i = 0; i < lengthInBits; i += 3) {
|
||||||
unsigned char octetA;
|
unsigned char octetA;
|
||||||
|
@ -117,7 +102,7 @@ treeNode *findOrCreateNode(unsigned long lengthInBits,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentNode->child[octet] == NULL) {
|
if (currentNode->child[octet] == NULL) {
|
||||||
currentNode->child[octet] = new treeNode;
|
currentNode->child[octet] = new TreeNode;
|
||||||
} else if (!currentNode->child[octet]->hostname->empty()) {
|
} else if (!currentNode->child[octet]->hostname->empty()) {
|
||||||
LAST_KNOWN_HOSTNAME = currentNode->child[octet]->hostname;
|
LAST_KNOWN_HOSTNAME = currentNode->child[octet]->hostname;
|
||||||
}
|
}
|
||||||
|
@ -205,7 +190,7 @@ bool loadSpaceData(void) {
|
||||||
|
|
||||||
int main (int argc, const char *argv[]) {
|
int main (int argc, const char *argv[]) {
|
||||||
int handle = network_init();
|
int handle = network_init();
|
||||||
unsigned char packet_data[BUFFER_LENGTH_SAMPLES];
|
unsigned char packetData[PACKET_LENGTH_BYTES];
|
||||||
long received_bytes = 0;
|
long received_bytes = 0;
|
||||||
|
|
||||||
if (!handle) {
|
if (!handle) {
|
||||||
|
@ -223,14 +208,14 @@ int main (int argc, const char *argv[]) {
|
||||||
std::cout << "[DEBUG] Listening for Datagrams" << std::endl;
|
std::cout << "[DEBUG] Listening for Datagrams" << std::endl;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
received_bytes = recvfrom(handle, (unsigned char*)packet_data, BUFFER_LENGTH_BYTES, 0, (sockaddr*)&dest_address, &destLength);
|
received_bytes = recvfrom(handle, (unsigned char*)packetData, PACKET_LENGTH_BYTES, 0, (sockaddr*)&destAddress, &destLength);
|
||||||
if (received_bytes > 0) {
|
if (received_bytes > 0) {
|
||||||
unsigned long lengthInBits;
|
unsigned long lengthInBits;
|
||||||
lengthInBits = packet_data[0] * 3;
|
lengthInBits = packetData[0] * 3;
|
||||||
|
|
||||||
unsigned char addressData[sizeof(packet_data)-1];
|
unsigned char addressData[sizeof(packetData)-1];
|
||||||
for (int i = 0; i < sizeof(packet_data)-1; ++i) {
|
for (int i = 0; i < sizeof(packetData)-1; ++i) {
|
||||||
addressData[i] = packet_data[i+1];
|
addressData[i] = packetData[i+1];
|
||||||
}
|
}
|
||||||
std::string thisHostname;
|
std::string thisHostname;
|
||||||
std::string thisNickname;
|
std::string thisNickname;
|
||||||
|
@ -238,7 +223,7 @@ int main (int argc, const char *argv[]) {
|
||||||
int domain_id = 0;
|
int domain_id = 0;
|
||||||
long sentBytes;
|
long sentBytes;
|
||||||
|
|
||||||
treeNode thisNode = *findOrCreateNode(lengthInBits, addressData, &thisHostname, &thisNickname, domain_id);
|
TreeNode thisNode = *findOrCreateNode(lengthInBits, addressData, &thisHostname, &thisNickname, domain_id);
|
||||||
|
|
||||||
if (thisNode.hostname->empty()) {
|
if (thisNode.hostname->empty()) {
|
||||||
hostnameHolder = *LAST_KNOWN_HOSTNAME;
|
hostnameHolder = *LAST_KNOWN_HOSTNAME;
|
||||||
|
@ -250,8 +235,8 @@ int main (int argc, const char *argv[]) {
|
||||||
std::copy(hostnameHolder.begin(), hostnameHolder.end(), hostname);
|
std::copy(hostnameHolder.begin(), hostnameHolder.end(), hostname);
|
||||||
hostname[hostnameHolder.size()] = '\0';
|
hostname[hostnameHolder.size()] = '\0';
|
||||||
|
|
||||||
sentBytes = sendto(handle, &hostname, BUFFER_LENGTH_BYTES,
|
sentBytes = sendto(handle, &hostname, PACKET_LENGTH_BYTES,
|
||||||
0, (sockaddr*)&dest_address, sizeof(dest_address));
|
0, (sockaddr*)&destAddress, sizeof(destAddress));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue