+static struct {
+ char text[16];
+ int idle;
+} user_msgs[16];
+
+static int handle_socket(int sock)
+{
+ char buf[256], *p;
+ int i, ret;
+
+ ret = recv(sock, buf, sizeof(buf) - 1, 0);
+ if (ret < 0) {
+ perror("recv");
+ return ret;
+ }
+ if (ret == 0)
+ return 0;
+
+ buf[ret] = 0;
+ p = strchr(buf, ':');
+ if (p != NULL) {
+ for (i = 0; i < ARRAY_SIZE(user_msgs); i++) {
+ if (user_msgs[i].text[0] == 0)
+ break;
+ if (!strncmp(user_msgs[i].text, buf, p - buf + 1))
+ break;
+ }
+ if (i == ARRAY_SIZE(user_msgs)) {
+ printf("out of user_msg slots\n");
+ return 0;
+ }
+ memcpy(user_msgs[i].text, buf, sizeof(user_msgs[i].text) - 1);
+ user_msgs[i].text[sizeof(user_msgs[i].text) - 1] = 0;
+ user_msgs[i].idle = 0;
+ }
+ else if (!strcmp(buf, "poke")) {
+ // if hidden, show up
+ // if visible, exit
+ if (g_hide) {
+ g_hide = 0;
+ return 1;
+ }
+ g_exit = 1;
+ return 1;
+ }
+ else if (!strcmp(buf, "hide")) {
+ g_hide = 1;
+ return 1;
+ }
+ else if (!strcmp(buf, "show")) {
+ g_hide = 0;
+ return 1;
+ }
+ else if (!strcmp(buf, "quit")) {
+ g_exit = 1;
+ return 1;
+ }
+ else {
+ printf("unknown command: '%s'\n", buf);
+ }
+
+ return 0;
+}
+