aboutsummaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-12-24 17:28:16 -0500
committerFranklin Wei <git@fwei.tk>2015-12-24 17:28:16 -0500
commit28f94a54984fa7aa46fcb25e7991c1136329670f (patch)
tree3ff94868772ab4c222feec60fa34a11605613398 /src/server.c
parent191b3750b56c83688ff596990608eb262ae9ec60 (diff)
downloadnetcosm-28f94a54984fa7aa46fcb25e7991c1136329670f.zip
netcosm-28f94a54984fa7aa46fcb25e7991c1136329670f.tar.gz
netcosm-28f94a54984fa7aa46fcb25e7991c1136329670f.tar.bz2
netcosm-28f94a54984fa7aa46fcb25e7991c1136329670f.tar.xz
movement
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/server.c b/src/server.c
index f82502d..598dd8d 100644
--- a/src/server.c
+++ b/src/server.c
@@ -215,13 +215,33 @@ static void req_send_desc(unsigned char *data, size_t len, struct child_data *se
write(sender->outpipe[1], &newline, 1);
}
-static void req_change_room(unsigned char *data, size_t len, struct child_data *sender)
+static void req_set_room(unsigned char *data, size_t len, struct child_data *sender)
{
room_id id = *((room_id*)data);
sender->room = id;
}
+static void req_move_room(unsigned char *data, size_t len, struct child_data *sender)
+{
+ enum direction_t dir = *((enum direction_t*)data);
+ struct room_t *current = room_get(sender->room);
+
+ /* TODO: checking */
+ room_id new = current->adjacent[dir];
+ int status;
+ if(new != ROOM_NONE)
+ {
+ sender->room = new;
+ status = 1;
+ }
+ else
+ {
+ status = 0;
+ }
+ write(sender->outpipe[1], &status, sizeof(status));
+}
+
static const struct child_request {
unsigned char code;
@@ -247,7 +267,8 @@ static const struct child_request {
{ REQ_KICK, true, CHILD_ALL, req_kick_client, NULL, REQ_NOP },
{ REQ_WAIT, false, CHILD_NONE, NULL, req_wait, REQ_NOP },
{ REQ_LOOK, false, CHILD_NONE, NULL, req_send_desc, REQ_BCASTMSG },
- { REQ_CHANGEROOM, true, CHILD_NONE, NULL, req_change_room, REQ_NOP },
+ { REQ_SETROOM, true, CHILD_NONE, NULL, req_set_room, REQ_NOP },
+ { REQ_MOVE, true, CHILD_NONE, NULL, req_move_room, REQ_MOVE },
};
void sig_printf(const char *fmt, ...)