platform/lib/src/util.cc

52 lines
1.5 KiB
C++
Raw Normal View History

2019-04-29 08:22:36 +00:00
#include <dart_native_api.h>
2019-04-29 05:10:27 +00:00
#include "angel_wings.h"
2019-04-29 05:13:45 +00:00
#include "wings_socket.h"
using namespace wings;
2019-04-29 05:10:27 +00:00
2019-04-29 05:55:02 +00:00
void Dart_WingsSocket_listen(Dart_NativeArguments arguments)
{
uint64_t ptr;
Dart_Handle pointerHandle = Dart_GetNativeArgument(arguments, 0);
HandleError(Dart_IntegerToUint64(pointerHandle, &ptr));
auto *socket = (WingsSocket *)ptr;
socket->start(arguments);
}
2019-04-29 05:10:27 +00:00
void Dart_WingsSocket_getPort(Dart_NativeArguments arguments)
{
2019-04-29 05:13:45 +00:00
uint64_t ptr;
Dart_Handle pointerHandle = Dart_GetNativeArgument(arguments, 0);
HandleError(Dart_IntegerToUint64(pointerHandle, &ptr));
2019-04-29 05:55:02 +00:00
auto *socket = (WingsSocket *)ptr;
2019-04-29 05:13:45 +00:00
auto outHandle = Dart_NewIntegerFromUint64(socket->getInfo().port);
Dart_SetReturnValue(arguments, outHandle);
2019-04-29 05:10:27 +00:00
}
void Dart_WingsSocket_write(Dart_NativeArguments arguments)
{
2019-04-29 08:22:36 +00:00
int64_t fd;
void *data;
Dart_TypedData_Type type;
intptr_t len;
Dart_Handle fdHandle = Dart_GetNativeArgument(arguments, 0);
Dart_Handle dataHandle = Dart_GetNativeArgument(arguments, 1);
HandleError(Dart_IntegerToInt64(fdHandle, &fd));
HandleError(Dart_TypedDataAcquireData(dataHandle, &type, &data, &len));
write(fd, data, len);
HandleError(Dart_TypedDataReleaseData(dataHandle));
2019-04-29 05:10:27 +00:00
}
void Dart_WingsSocket_closeDescriptor(Dart_NativeArguments arguments)
{
2019-04-29 05:55:02 +00:00
int64_t fd;
Dart_Handle fdHandle = Dart_GetNativeArgument(arguments, 0);
HandleError(Dart_IntegerToInt64(fdHandle, &fd));
close(fd);
2019-04-29 05:10:27 +00:00
}
void Dart_WingsSocket_close(Dart_NativeArguments arguments)
{
// TODO: Actually do something.
}