hook space server up to shared UDPSocket class

This commit is contained in:
Stephen Birarda 2013-02-14 16:45:00 -08:00
parent d840b2baa9
commit da8fd5f4ee
8 changed files with 37 additions and 66 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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",

View file

@ -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");

View file

@ -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);
}

View file

@ -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;

View file

@ -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)

View file

@ -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);
}
}
}