console_api.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (c) 2012-2016 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "bundle_compiler.h"
  6. #include "console_server.h"
  7. #include "device.h"
  8. #include "dynamic_string.h"
  9. #include "json_object.h"
  10. #include "lua_environment.h"
  11. #include "sjson.h"
  12. #include "string_stream.h"
  13. #include "temp_allocator.h"
  14. namespace crown
  15. {
  16. static void console_command_script(ConsoleServer& /*cs*/, TCPSocket /*client*/, const char* json)
  17. {
  18. TempAllocator4096 ta;
  19. JsonObject obj(ta);
  20. DynamicString script(ta);
  21. sjson::parse(json, obj);
  22. sjson::parse_string(obj["script"], script);
  23. device()->lua_environment()->execute_string(script.c_str());
  24. }
  25. static void console_command_reload(ConsoleServer& /*cs*/, TCPSocket /*client*/, const char* json)
  26. {
  27. TempAllocator4096 ta;
  28. JsonObject obj(ta);
  29. sjson::parse(json, obj);
  30. DynamicString type(ta);
  31. DynamicString name(ta);
  32. sjson::parse_string(obj["resource_type"], type);
  33. sjson::parse_string(obj["resource_name"], name);
  34. logi("Reloading resource '%s.%s'", name.c_str(), type.c_str());
  35. device()->reload(ResourceId(type.c_str()), ResourceId(name.c_str()));
  36. logi("Reloaded resource '%s.%s'", name.c_str(), type.c_str());
  37. }
  38. static void console_command_pause(ConsoleServer& /*cs*/, TCPSocket /*client*/, const char* /*json*/)
  39. {
  40. device()->pause();
  41. }
  42. static void console_command_unpause(ConsoleServer& /*cs*/, TCPSocket /*client*/, const char* /*json*/)
  43. {
  44. device()->unpause();
  45. }
  46. static void console_command_compile(ConsoleServer& cs, TCPSocket client, const char* json)
  47. {
  48. TempAllocator4096 ta;
  49. JsonObject obj(ta);
  50. sjson::parse(json, obj);
  51. DynamicString id(ta);
  52. DynamicString bundle_dir(ta);
  53. DynamicString platform(ta);
  54. sjson::parse_string(obj["id"], id);
  55. sjson::parse_string(obj["bundle_dir"], bundle_dir);
  56. sjson::parse_string(obj["platform"], platform);
  57. {
  58. TempAllocator512 ta;
  59. StringStream ss(ta);
  60. ss << "{\"type\":\"compile\",\"id\":\"" << id.c_str() << "\",\"start\":true}";
  61. cs.send(client, string_stream::c_str(ss));
  62. }
  63. logi("Compiling '%s'", id.c_str());
  64. bool succ = device()->bundle_compiler()->compile(bundle_dir.c_str(), platform.c_str());
  65. if (succ)
  66. logi("Compiled '%s'", id.c_str());
  67. else
  68. loge("Error while compiling '%s'", id.c_str());
  69. {
  70. TempAllocator512 ta;
  71. StringStream ss(ta);
  72. ss << "{\"type\":\"compile\",\"id\":\"" << id.c_str() << "\",\"success\":" << (succ ? "true" : "false") << "}";
  73. cs.send(client, string_stream::c_str(ss));
  74. }
  75. }
  76. void load_console_api(ConsoleServer& cs)
  77. {
  78. cs.register_command("script", console_command_script);
  79. cs.register_command("reload", console_command_reload);
  80. cs.register_command("pause", console_command_pause);
  81. cs.register_command("unpause", console_command_unpause);
  82. cs.register_command("compile", console_command_compile);
  83. }
  84. } // namespace crown