Basic listen works

This commit is contained in:
Tobe O 2019-04-29 01:10:27 -04:00
parent e96d371896
commit 2738fa7e58
5 changed files with 57 additions and 7 deletions

View file

@ -1,6 +1,6 @@
CXXFLAGS := $(CXXFLAGS) --std=c++11 -fPIC -DDART_SHARED_LIB=1 -I $(DART_SDK)/include
objects := lib/src/angel_wings.o lib/src/wings_socket.o\
lib/src/bind.o
lib/src/bind.o lib/src/util.o
.PHONY: distclean clean
@ -13,10 +13,13 @@ clean:
find . -type f -name '*.so' -delete
find . -type f -name '*.dylib' -delete
mac: lib/src/libangel_wings.dylib
mac: libangel_wings.dylib
linux: lib/src/libangel_wings.so
libangel_wings.dylib: lib/src/libangel_wings.dylib
cp $< $@
lib/src/libangel_wings.dylib: $(objects)
%.dylib: $(objects)

View file

@ -37,7 +37,7 @@ void wingsReturnBound(Dart_NativeArguments arguments, WingsSocket *socket)
Dart_Port sendPort;
HandleError(Dart_SendPortGetId(socket->getInfo().sendPortHandle, &sendPort));
socket->incrRef(sendPort);
auto ptr = (uint64_t) socket;
auto ptr = (uint64_t)socket;
Dart_Handle ptrHandle = Dart_NewIntegerFromUint64(ptr);
Dart_SetReturnValue(arguments, ptrHandle);
}
@ -138,7 +138,7 @@ WingsSocket *wingsBindNewSocket(Dart_NativeArguments arguments, const WingsSocke
return nullptr;
}
auto *out = new WingsSocket(info);
auto *out = new WingsSocket(sock, info);
globalSocketList.push_back(out);
return out;
}

21
lib/src/util.cc Normal file
View file

@ -0,0 +1,21 @@
#include "angel_wings.h"
void Dart_WingsSocket_getPort(Dart_NativeArguments arguments)
{
// TODO: Actually do something.
}
void Dart_WingsSocket_write(Dart_NativeArguments arguments)
{
// TODO: Actually do something.
}
void Dart_WingsSocket_closeDescriptor(Dart_NativeArguments arguments)
{
// TODO: Actually do something.
}
void Dart_WingsSocket_close(Dart_NativeArguments arguments)
{
// TODO: Actually do something.
}

View file

@ -1 +1,27 @@
#include <cstring>
#include "wings_socket.h"
using namespace wings;
std::vector<WingsSocket *> wings::globalSocketList;
bool WingsSocketInfo::operator==(const WingsSocketInfo &other) const
{
return (strcmp(address, other.address) == 0) &&
port == other.port;
}
WingsSocket::WingsSocket(int sockfd, const WingsSocketInfo &info) : sockfd(sockfd), info(info)
{
refCount = 0;
}
void WingsSocket::incrRef(Dart_Port port)
{
refCount++;
sendPorts.push_back(port);
}
const WingsSocketInfo &WingsSocket::getInfo() const
{
return info;
}

View file

@ -19,9 +19,9 @@ struct WingsSocketInfo
class WingsSocket
{
public:
explicit WingsSocket(const WingsSocketInfo& info);
explicit WingsSocket(int sockfd, const WingsSocketInfo& info);
void incrRef(Dart_Port port);
const WingsSocketInfo getInfo() const;
const WingsSocketInfo& getInfo() const;
private:
WingsSocketInfo info;