main.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. #include "../common/sti/sti.h"
  5. #include "net.h"
  6. #include "db.h"
  7. volatile _Atomic int g_shutdown = 0;
  8. typedef struct {
  9. u32 id;
  10. char first_name[32];
  11. char last_name[32];
  12. bool sex;
  13. u64 age;
  14. u64 height;
  15. u16 weight;
  16. } UserTest;
  17. #define membersize(t, m) sizeof( ((t*)0)->m )
  18. int main(int argc, char* argv[]) {
  19. string_internment_table_init(&global_string_internment_table);
  20. DB* db = calloc(1, sizeof(*db));
  21. DB_InitEmpty(db);
  22. db->backingDir = strint("./testdb");
  23. ObjStore* userStore = DB_LoadStore(db, "users");
  24. /*
  25. ObjDef* userDef = DB_AllocObjDef(db, "user");
  26. userDef->size = sizeof(UserTest);
  27. VEC_PUSH(&userDef->fields, ((FieldDef){
  28. .id = 0,
  29. .name = strint("id"),
  30. .offset = offsetof(UserTest, id),
  31. .len = membersize(UserTest, id),
  32. .type = 'i',
  33. }));
  34. VEC_PUSH(&userDef->fields, ((FieldDef){
  35. .id = 0,
  36. .name = strint("first_name"),
  37. .offset = offsetof(UserTest, first_name),
  38. .len = membersize(UserTest, first_name),
  39. .type = 'c',
  40. }));
  41. VEC_PUSH(&userDef->indices, ((IndexDef){
  42. .id = 0,
  43. .type = 'h',
  44. .name = strint("age"),
  45. .offset = offsetof(UserTest, age),
  46. .len = membersize(UserTest, age),
  47. }));
  48. DB_FinalizeObjDef(db, userDef);
  49. ObjStore* userStore = DB_CreateStore(db, userDef, "users");
  50. //*/
  51. UserTest u1 = {
  52. .id = 10032,
  53. .first_name = "steve",
  54. .last_name = "homeless",
  55. .sex = 0,
  56. .height = 172,
  57. .weight = 78,
  58. .age = 56,
  59. };
  60. ObjStore_Insert(db, userStore, &u1);
  61. u1.age = 23;
  62. ObjStore_Insert(db, userStore, &u1);
  63. UserTest resuser;
  64. int ret = ObjStore_IndexFetch(db, userStore, 0, &u1.age, &resuser);
  65. printf("fetch res: %d\n", ret);
  66. printf("user age: %ld\n", resuser.age);
  67. return 1;
  68. int epollfd = epoll_create(16);
  69. server_t* srv = server_init(epollfd, 42069);
  70. // srv->on_accept = accepted;
  71. // srv->user_data = cgi;
  72. printf("Starting server:\n");
  73. printf(" port: 42069\n");
  74. printf("\n");
  75. while(!g_shutdown) {
  76. server_tick(srv, 100);
  77. // sleep(1);
  78. }
  79. return 0;
  80. }
  81. /*
  82. static void check_buffer(connection_t* con) {
  83. scgi_request* req = con->user_data;
  84. if(!req->buf) {
  85. req->buf = malloc(4096);
  86. req->buf_alloc = 4096;
  87. req->buf_remain = 4096;
  88. return;
  89. }
  90. req->buf_remain = req->buf_alloc;
  91. req->buf_alloc *= 2;
  92. req->buf = realloc(req->buf, req->buf_alloc);
  93. }
  94. */
  95. static void accepted(server_t* srv, connection_t* con) {
  96. printf("accepted connection\n");
  97. /*
  98. scgi_request* req = calloc(1, sizeof(*req));
  99. req->srv = srv->user_data;
  100. con->buffer_full = check_buffer;
  101. con->got_data = on_data;
  102. con->user_data = req;
  103. con->buf = &req->buf;
  104. con->buf_remain = &req->buf_remain;
  105. */
  106. }
  107. static void on_data(connection_t* con) {
  108. // scgi_request* req = con->user_data;
  109. // scgi_server* cgi = con->srv->user_data;
  110. }