mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-14 11:46:34 +02:00
hook space server up to shared UDPSocket class
This commit is contained in:
parent
d840b2baa9
commit
da8fd5f4ee
8 changed files with 37 additions and 66 deletions
|
@ -5,5 +5,6 @@ MACRO(LINK_HIFI_SHARED_LIBRARY TARGET)
|
|||
|
||||
include_directories(../shared/src)
|
||||
get_directory_property(HIFI_SHARED_LIBRARY DIRECTORY ../shared DEFINITION HIFI_SHARED_LIBRARY)
|
||||
add_dependencies(${TARGET} ${HIFI_SHARED_LIBRARY})
|
||||
target_link_libraries(${TARGET} ${HIFI_SHARED_LIBRARY})
|
||||
ENDMACRO(LINK_HIFI_SHARED_LIBRARY _target)
|
|
@ -182,7 +182,7 @@ void *receiveAudioViaUDP(void *args) {
|
|||
AudioData *sharedAudioData = threadArgs->sharedAudioData;
|
||||
|
||||
int16_t *receivedData = new int16_t[BUFFER_LENGTH_SAMPLES];
|
||||
int *receivedBytes = new int;
|
||||
ssize_t receivedBytes;
|
||||
|
||||
timeval previousReceiveTime, currentReceiveTime = {};
|
||||
|
||||
|
@ -204,7 +204,7 @@ void *receiveAudioViaUDP(void *args) {
|
|||
}
|
||||
|
||||
while (true) {
|
||||
if (sharedAudioData->audioSocket->receive((void *)receivedData, receivedBytes)) {
|
||||
if (sharedAudioData->audioSocket->receive((void *)receivedData, &receivedBytes)) {
|
||||
|
||||
bool firstSample = (currentReceiveTime.tv_sec == 0);
|
||||
|
||||
|
|
|
@ -764,12 +764,12 @@ void key(unsigned char k, int x, int y)
|
|||
void *networkReceive(void *args)
|
||||
{
|
||||
sockaddr_in senderAddress;
|
||||
int bytesRecvd;
|
||||
ssize_t bytesReceived;
|
||||
while (true) {
|
||||
if (agentSocket.receive(&senderAddress, (void *)incomingPacket, &bytesRecvd)) {
|
||||
if (agentSocket.receive(&senderAddress, (void *)incomingPacket, &bytesReceived)) {
|
||||
|
||||
packetcount++;
|
||||
bytescount += bytesRecvd;
|
||||
bytescount += bytesReceived;
|
||||
// If packet is a Mouse data packet, copy it over
|
||||
if (incomingPacket[0] == 'P') {
|
||||
//
|
||||
|
@ -796,14 +796,14 @@ void *networkReceive(void *args)
|
|||
// Message from domainserver
|
||||
//
|
||||
//printf("agent list received!\n");
|
||||
nearbyAgents = update_agents(&incomingPacket[1], bytesRecvd - 1);
|
||||
nearbyAgents = update_agents(&incomingPacket[1], bytesReceived - 1);
|
||||
kludgyMixerUpdate(audio);
|
||||
} else if (incomingPacket[0] == 'H') {
|
||||
//
|
||||
// Broadcast packet from another agent
|
||||
//
|
||||
//printf("broadcast received");
|
||||
update_agent(inet_ntoa(senderAddress.sin_addr), ntohs(senderAddress.sin_port), &incomingPacket[1], bytesRecvd - 1);
|
||||
update_agent(inet_ntoa(senderAddress.sin_addr), ntohs(senderAddress.sin_port), &incomingPacket[1], bytesReceived - 1);
|
||||
} else if (incomingPacket[0] == 'T') {
|
||||
// Received a self-test packet (to get one's own IP), copy it to local variable!
|
||||
printf("My Address: %s:%u\n",
|
||||
|
|
|
@ -248,7 +248,7 @@ void *reportAliveToDS(void *args) {
|
|||
int main(int argc, const char * argv[])
|
||||
{
|
||||
timeval lastAgentUpdate;
|
||||
int receivedBytes = 0;
|
||||
ssize_t receivedBytes = 0;
|
||||
|
||||
// Lookup the IP address of things we have hostnames
|
||||
printf("need to look this one up\n");
|
||||
|
|
|
@ -48,13 +48,13 @@ UDPSocket::~UDPSocket() {
|
|||
}
|
||||
|
||||
// Receive data on this socket with retrieving address of sender
|
||||
bool UDPSocket::receive(void *receivedData, int *receivedBytes) {
|
||||
bool UDPSocket::receive(void *receivedData, ssize_t *receivedBytes) {
|
||||
|
||||
return receive(&senderAddress, receivedData, receivedBytes);
|
||||
}
|
||||
|
||||
// Receive data on this socket with the address of the sender
|
||||
bool UDPSocket::receive(sockaddr_in *recvAddress, void *receivedData, int *receivedBytes) {
|
||||
bool UDPSocket::receive(sockaddr_in *recvAddress, void *receivedData, ssize_t *receivedBytes) {
|
||||
|
||||
socklen_t addressSize = sizeof(&recvAddress);
|
||||
|
||||
|
@ -64,15 +64,10 @@ bool UDPSocket::receive(sockaddr_in *recvAddress, void *receivedData, int *recei
|
|||
return (*receivedBytes > 0);
|
||||
}
|
||||
|
||||
int UDPSocket::send(char * destAddress, int destPort, const void *data, int byteLength) {
|
||||
|
||||
// change address and port on reusable global to passed variables
|
||||
destSockaddr.sin_addr.s_addr = inet_addr(destAddress);
|
||||
destSockaddr.sin_port = htons((uint16_t)destPort);
|
||||
|
||||
int UDPSocket::send(sockaddr_in *destAddress, const void *data, size_t byteLength) {
|
||||
// send data via UDP
|
||||
int sent_bytes = sendto(handle, (const char*)data, byteLength,
|
||||
0, (sockaddr *)&destSockaddr, sizeof(sockaddr_in));
|
||||
0, (sockaddr *)&destSockaddr, sizeof(sockaddr_in));
|
||||
|
||||
if (sent_bytes != byteLength) {
|
||||
printf("Failed to send packet: return value = %d\n", sent_bytes);
|
||||
|
@ -81,3 +76,12 @@ int UDPSocket::send(char * destAddress, int destPort, const void *data, int byte
|
|||
|
||||
return sent_bytes;
|
||||
}
|
||||
|
||||
int UDPSocket::send(char * destAddress, int destPort, const void *data, size_t byteLength) {
|
||||
|
||||
// change address and port on reusable global to passed variables
|
||||
destSockaddr.sin_addr.s_addr = inet_addr(destAddress);
|
||||
destSockaddr.sin_port = htons((uint16_t)destPort);
|
||||
|
||||
return send(&destSockaddr, data, byteLength);
|
||||
}
|
||||
|
|
|
@ -19,9 +19,10 @@ class UDPSocket {
|
|||
public:
|
||||
UDPSocket(int listening_port);
|
||||
~UDPSocket();
|
||||
int send(char *destAddress, int destPort, const void *data, int byteLength);
|
||||
bool receive(void *receivedData, int *receivedBytes);
|
||||
bool receive(sockaddr_in *recvAddress, void *receivedData, int *receivedBytes);
|
||||
int send(sockaddr_in *destAddress, const void *data, size_t byteLength);
|
||||
int send(char *destAddress, int destPort, const void *data, size_t byteLength);
|
||||
bool receive(void *receivedData, ssize_t *receivedBytes);
|
||||
bool receive(sockaddr_in *recvAddress, void *receivedData, ssize_t *receivedBytes);
|
||||
private:
|
||||
int handle;
|
||||
|
||||
|
|
|
@ -5,3 +5,6 @@ project(space)
|
|||
file(GLOB SPACE_SRCS src/*.cpp src/*.h)
|
||||
|
||||
add_executable(space ${SPACE_SRCS})
|
||||
|
||||
include(../LinkHifiShared.cmake)
|
||||
link_hifi_shared_library(space)
|
|
@ -25,9 +25,10 @@
|
|||
#include <stack>
|
||||
#include <bitset>
|
||||
#include "TreeNode.h"
|
||||
#include "UDPSocket.h"
|
||||
|
||||
const char *CONFIG_FILE = "/etc/below92/spaceserver.data.txt";
|
||||
const int UDP_PORT = 55551;
|
||||
const int SPACE_LISTENING_PORT = 55551;
|
||||
std::vector< std::vector<std::string> > configData;
|
||||
sockaddr_in address, destAddress;
|
||||
socklen_t destLength = sizeof(destAddress);
|
||||
|
@ -36,45 +37,16 @@ std::string ROOT_HOSTNAME = "root.highfidelity.co";
|
|||
std::string ROOT_NICKNAME = "root";
|
||||
std::string *LAST_KNOWN_HOSTNAME = new std::string();
|
||||
|
||||
const short PACKET_LENGTH_BYTES = 1024;
|
||||
const size_t PACKET_LENGTH_BYTES = 1024;
|
||||
|
||||
TreeNode rootNode;
|
||||
UDPSocket spaceSocket(SPACE_LISTENING_PORT);
|
||||
|
||||
void printBinaryValue(char element) {
|
||||
std::bitset<8> x(element);
|
||||
std::cout << "Printing binary value: " << x << std::endl;
|
||||
}
|
||||
|
||||
int create_socket()
|
||||
{
|
||||
// Create socket
|
||||
int handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
if (handle <= 0) {
|
||||
printf("Failed to create socket: %d\n", handle);
|
||||
return false;
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
int network_init()
|
||||
{
|
||||
int handle = create_socket();
|
||||
|
||||
// Bind socket to port
|
||||
address.sin_family = AF_INET;
|
||||
address.sin_addr.s_addr = INADDR_ANY;
|
||||
address.sin_port = htons( (unsigned short) UDP_PORT );
|
||||
|
||||
if (bind(handle, (const sockaddr*) &address, sizeof(sockaddr_in)) < 0) {
|
||||
printf( "failed to bind socket\n" );
|
||||
return false;
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
TreeNode *findOrCreateNode(unsigned long lengthInBits,
|
||||
unsigned char *addressBytes,
|
||||
std::string *hostname,
|
||||
|
@ -189,16 +161,9 @@ bool loadSpaceData(void) {
|
|||
}
|
||||
|
||||
int main (int argc, const char *argv[]) {
|
||||
int handle = network_init();
|
||||
unsigned char packetData[PACKET_LENGTH_BYTES];
|
||||
long received_bytes = 0;
|
||||
|
||||
if (!handle) {
|
||||
std::cout << "[FATAL] Failed to create UDP listening socket" << std::endl;
|
||||
return 0;
|
||||
} else {
|
||||
std::cout << "[DEBUG] Socket started" << std::endl;
|
||||
}
|
||||
unsigned char packetData[PACKET_LENGTH_BYTES];
|
||||
ssize_t receivedBytes = 0;
|
||||
|
||||
rootNode.hostname = &ROOT_HOSTNAME;
|
||||
rootNode.nickname = &ROOT_NICKNAME;
|
||||
|
@ -208,8 +173,7 @@ int main (int argc, const char *argv[]) {
|
|||
std::cout << "[DEBUG] Listening for Datagrams" << std::endl;
|
||||
|
||||
while (true) {
|
||||
received_bytes = recvfrom(handle, (unsigned char*)packetData, PACKET_LENGTH_BYTES, 0, (sockaddr*)&destAddress, &destLength);
|
||||
if (received_bytes > 0) {
|
||||
if (spaceSocket.receive(&destAddress, &packetData, &receivedBytes)) {
|
||||
unsigned long lengthInBits;
|
||||
lengthInBits = packetData[0] * 3;
|
||||
|
||||
|
@ -221,7 +185,6 @@ int main (int argc, const char *argv[]) {
|
|||
std::string thisNickname;
|
||||
std::string hostnameHolder;
|
||||
int domain_id = 0;
|
||||
long sentBytes;
|
||||
|
||||
TreeNode thisNode = *findOrCreateNode(lengthInBits, addressData, &thisHostname, &thisNickname, domain_id);
|
||||
|
||||
|
@ -235,8 +198,7 @@ int main (int argc, const char *argv[]) {
|
|||
std::copy(hostnameHolder.begin(), hostnameHolder.end(), hostname);
|
||||
hostname[hostnameHolder.size()] = '\0';
|
||||
|
||||
sentBytes = sendto(handle, &hostname, PACKET_LENGTH_BYTES,
|
||||
0, (sockaddr*)&destAddress, sizeof(destAddress));
|
||||
spaceSocket.send(&destAddress, &hostname, PACKET_LENGTH_BYTES);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue