beginnings of the internet (card)
This commit is contained in:
5
Makefile
5
Makefile
@@ -17,7 +17,7 @@ DEBUG=
|
||||
else
|
||||
OPT=-O0
|
||||
SANITIZE=undefined,address
|
||||
DEBUG=-ggdb
|
||||
DEBUG=-g
|
||||
endif
|
||||
|
||||
NN_STD=gnu99
|
||||
@@ -31,7 +31,8 @@ ifdef SANITIZE
|
||||
SANITIZE_FLAGS += -fsanitize=$(SANITIZE)
|
||||
endif
|
||||
|
||||
CFLAGS=-fPIC $(OPT) $(SANITIZE_FLAGS) $(DEBUG) $(NNFLAGS) $(WARN)
|
||||
# no-omit-frame-pointer so if a crash does happen we can trace it
|
||||
CFLAGS=-fPIC -fno-omit-frame-pointer $(OPT) $(SANITIZE_FLAGS) $(DEBUG) $(NNFLAGS) $(WARN)
|
||||
|
||||
LDFLAGS=$(OPT) $(DEBUG) $(SANITIZE_FLAGS)
|
||||
|
||||
|
||||
1
TODO.md
1
TODO.md
@@ -15,7 +15,6 @@ to be made more portable.
|
||||
Not everything OC has (as a few of them are really MC-centered) but most of it.
|
||||
|
||||
- `computer` component
|
||||
- `tunnel` component
|
||||
- `internet` component (note: NN does not handle internet requests, those are up to the emulator)
|
||||
- `relay` component (note: OCDoc still refers to it as `access_point`)
|
||||
- `geolyzer` component
|
||||
|
||||
@@ -3924,9 +3924,44 @@ nn_Exit nn_pushLClipboard(nn_Computer *computer, const char *keyboardAddress, co
|
||||
return nn_pushSignal(computer, 3);
|
||||
}
|
||||
|
||||
nn_Exit nn_pushRedstoneChanged(nn_Computer *computer, const char *redstoneAddress, int side, int oldValue, int newValue, int color);
|
||||
nn_Exit nn_pushRedstoneChanged(nn_Computer *computer, const char *redstoneAddress, int side, int oldValue, int newValue, int color) {
|
||||
nn_Exit err = nn_pushstring(computer, "redstone_changed");
|
||||
if(err) return err;
|
||||
err = nn_pushstring(computer, redstoneAddress);
|
||||
if(err) return err;
|
||||
err = nn_pushinteger(computer, side);
|
||||
if(err) return err;
|
||||
err = nn_pushinteger(computer, oldValue);
|
||||
if(err) return err;
|
||||
err = nn_pushinteger(computer, newValue);
|
||||
if(err) return err;
|
||||
err = color < 0 ? nn_pushnull(computer) : nn_pushinteger(computer, newValue);
|
||||
if(err) return err;
|
||||
return nn_pushSignal(computer, 6);
|
||||
}
|
||||
|
||||
nn_Exit nn_pushMotion(nn_Computer *computer, double relX, double relY, double relZ, const char *entityName);
|
||||
nn_Exit nn_pushMotion(nn_Computer *computer, double relX, double relY, double relZ, const char *entityName) {
|
||||
nn_Exit err = nn_pushstring(computer, "motion");
|
||||
if(err) return err;
|
||||
err = nn_pushnumber(computer, relX);
|
||||
if(err) return err;
|
||||
err = nn_pushnumber(computer, relY);
|
||||
if(err) return err;
|
||||
err = nn_pushnumber(computer, relZ);
|
||||
if(err) return err;
|
||||
// remember: safe to push NULL to pushstring in which cases it pushes null.
|
||||
err = nn_pushstring(computer, entityName);
|
||||
if(err) return err;
|
||||
return nn_pushSignal(computer, 5);
|
||||
}
|
||||
|
||||
nn_Exit nn_pushInternetReady(nn_Computer *computer, const char *id, size_t idlen) {
|
||||
nn_Exit err = nn_pushstring(computer, "internet_ready");
|
||||
if(err) return err;
|
||||
err = nn_pushlstring(computer, id, idlen);
|
||||
if(err) return err;
|
||||
return nn_pushSignal(computer, 2);
|
||||
}
|
||||
|
||||
typedef enum nn_NetworkValueTag {
|
||||
NN_NETVAL_NULL = 0x00,
|
||||
@@ -7365,3 +7400,8 @@ nn_Component *nn_createTunnel(nn_Universe *universe, const char *address, const
|
||||
nn_setComponentHandler(c, nn_tunnelHandler);
|
||||
return c;
|
||||
}
|
||||
|
||||
nn_InternetCard nn_defaultInternetCard = {
|
||||
.protocolsSupported = NN_INET_ALL,
|
||||
.transmissionEnergyCost = 0,
|
||||
};
|
||||
|
||||
@@ -1257,6 +1257,10 @@ nn_Exit nn_pushRedstoneChanged(nn_Computer *computer, const char *redstoneAddres
|
||||
// entityName can be NULL if the entity has no name.
|
||||
nn_Exit nn_pushMotion(nn_Computer *computer, double relX, double relY, double relZ, const char *entityName);
|
||||
|
||||
// Pushes an internet_ready signal.
|
||||
// This signal is queued when an internet socket is ready for commmunication.
|
||||
nn_Exit nn_pushInternetReady(nn_Computer *computer, const char *id, size_t idlen);
|
||||
|
||||
// A buffer with encoded values
|
||||
typedef struct nn_EncodedNetworkContents {
|
||||
nn_Context *ctx;
|
||||
@@ -2311,6 +2315,26 @@ typedef nn_Exit (nn_TunnelHandler)(nn_TunnelRequest *req);
|
||||
|
||||
nn_Component *nn_createTunnel(nn_Universe *universe, const char *address, const nn_Tunnel *modem, void *state, nn_TunnelHandler *handler);
|
||||
|
||||
typedef enum nn_InternetProtocol {
|
||||
NN_INET_NONE = 0,
|
||||
NN_INET_HTTP = 1<<0,
|
||||
NN_INET_TCP = 1<<1,
|
||||
NN_INET_UDP = 1<<2,
|
||||
NN_INET_WEBSOCKET = 1<<3,
|
||||
NN_INET_TLS = 1<<4,
|
||||
|
||||
NN_INET_ALL = NN_INET_HTTP | NN_INET_TCP | NN_INET_UDP | NN_INET_WEBSOCKET | NN_INET_TLS,
|
||||
} nn_InternetProtocol;
|
||||
|
||||
typedef struct nn_InternetCard {
|
||||
// bitwise OR multiple of them
|
||||
unsigned char protocolsSupported;
|
||||
// per-byte cost of a write
|
||||
double transmissionEnergyCost;
|
||||
} nn_InternetCard;
|
||||
|
||||
extern nn_InternetCard nn_defaultInternetCard;
|
||||
|
||||
// Colors and palettes.
|
||||
// Do note that the
|
||||
|
||||
|
||||
Reference in New Issue
Block a user