beginnings of the internet (card)

This commit is contained in:
2026-05-16 17:46:48 +03:00
parent 810bf23942
commit a6d7278735
4 changed files with 69 additions and 5 deletions

View File

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

View File

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

View File

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

View File

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