beginnings of the internet (card)
This commit is contained in:
5
Makefile
5
Makefile
@@ -17,7 +17,7 @@ DEBUG=
|
|||||||
else
|
else
|
||||||
OPT=-O0
|
OPT=-O0
|
||||||
SANITIZE=undefined,address
|
SANITIZE=undefined,address
|
||||||
DEBUG=-ggdb
|
DEBUG=-g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
NN_STD=gnu99
|
NN_STD=gnu99
|
||||||
@@ -31,7 +31,8 @@ ifdef SANITIZE
|
|||||||
SANITIZE_FLAGS += -fsanitize=$(SANITIZE)
|
SANITIZE_FLAGS += -fsanitize=$(SANITIZE)
|
||||||
endif
|
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)
|
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.
|
Not everything OC has (as a few of them are really MC-centered) but most of it.
|
||||||
|
|
||||||
- `computer` component
|
- `computer` component
|
||||||
- `tunnel` component
|
|
||||||
- `internet` component (note: NN does not handle internet requests, those are up to the emulator)
|
- `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`)
|
- `relay` component (note: OCDoc still refers to it as `access_point`)
|
||||||
- `geolyzer` component
|
- `geolyzer` component
|
||||||
|
|||||||
@@ -3924,9 +3924,44 @@ nn_Exit nn_pushLClipboard(nn_Computer *computer, const char *keyboardAddress, co
|
|||||||
return nn_pushSignal(computer, 3);
|
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 {
|
typedef enum nn_NetworkValueTag {
|
||||||
NN_NETVAL_NULL = 0x00,
|
NN_NETVAL_NULL = 0x00,
|
||||||
@@ -7365,3 +7400,8 @@ nn_Component *nn_createTunnel(nn_Universe *universe, const char *address, const
|
|||||||
nn_setComponentHandler(c, nn_tunnelHandler);
|
nn_setComponentHandler(c, nn_tunnelHandler);
|
||||||
return c;
|
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.
|
// 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);
|
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
|
// A buffer with encoded values
|
||||||
typedef struct nn_EncodedNetworkContents {
|
typedef struct nn_EncodedNetworkContents {
|
||||||
nn_Context *ctx;
|
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);
|
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.
|
// Colors and palettes.
|
||||||
// Do note that the
|
// Do note that the
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user