static void onAgentMessage(int theConnection) { unsigned int inMessageLength = 0; unsigned int outMessageLength = 0; char* inMessage = 0; const char* outMessage = 0; unsigned int offset = 0; /* Read the data in the buffer (data from server) */ offset = 0; offset = rlBufferRead(&theBuffer, offset, &inMessageLength, 1, sizeof(int)); if (inMessageLength >= clientagent_inmessagecapacity) { inMessage = (char*)calloc(inMessageLength+1, sizeof(char)); free(clientagent_inmessage); clientagent_inmessage = inMessage; clientagent_inmessagecapacity = inMessageLength; } if (inMessageLength > 0) { offset = rlBufferRead(&theBuffer, offset, clientagent_inmessage, inMessageLength, sizeof(char)); } /*Make sure to null terminate the string */ clientagent_inmessage[inMessageLength]='\0'; /* Call RL method on the recv'd data */ outMessage = agent_message(clientagent_inmessage); if (outMessage != NULL) { outMessageLength = strlen(outMessage); } /* Prepare the buffer for sending data back to the server */ /* we want to start sending, so we're going to reset the offset to 0 so we write to the beginning of the buffer */ rlBufferClear(&theBuffer); offset = 0; offset = rlBufferWrite(&theBuffer, offset, &outMessageLength, 1, sizeof(int)); if (outMessageLength > 0) { offset = rlBufferWrite(&theBuffer, offset, outMessage, outMessageLength, sizeof(char)); } }
void Keyboard(unsigned char key, int x, int y) { B2_NOT_USED(x); B2_NOT_USED(y); switch (key) { case 27: exit(0); break; // Press 'z' to zoom out. case 'z': viewZoom = b2Min(1.1f * viewZoom, 20.0f); Resize(width, height); break; // Press 'x' to zoom in. case 'x': viewZoom = b2Max(0.9f * viewZoom, 0.02f); Resize(width, height); break; // Press 'r' to reset. case 'r': delete test; test = entry->createFcn(); break; // Press space to launch a bomb. case ' ': if (test) { test->LaunchBomb(); } break; case 'p': settings.pause = !settings.pause; break; // Press [ to prev test. case '[': --testSelection; if (testSelection < 0) { testSelection = testCount - 1; } glui->sync_live(); break; // Press ] to next test. case ']': ++testSelection; if (testSelection == testCount) { testSelection = 0; } glui->sync_live(); break; case 's': agent_message("save_policy results.dat"); printf("saved... value function\n"); break; case 'l': agent_message("load_policy results.dat"); printf("load... value function\n"); success = 0; fail = 0; break; case 'f': agent_message("freeze learning"); break; default: if (test) { test->Keyboard(key); } } }