Advertisement
Guest User

Untitled

a guest
Aug 17th, 2021
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.29 KB | None | 0 0
  1. /* Automatically generated by chibi-ffi; version: 0.4 */
  2.  
  3. #include <chibi/eval.h>
  4. #include "stdio.h"
  5. #include "stdbool.h"
  6. #include "stdlib.h"
  7. #include "stdio.h"
  8. #include "unistd.h"
  9. #include "ws.h"
  10.  
  11. static sexp ctx2;
  12.  
  13.  void onopen(int fd)
  14.  {
  15.   sexp ctx = ctx2;
  16.   sexp_gc_var1(cmd);
  17.   sexp_gc_preserve1(ctx,cmd);
  18.   cmd = sexp_list2(ctx, sexp_intern(ctx, "onopen", -1),sexp_make_integer(ctx, fd));
  19.   sexp_eval(ctx, cmd, NULL);
  20.   sexp_gc_release1(ctx);
  21.  }
  22.  
  23. void onclose(int fd)
  24. {
  25.   sexp ctx = ctx2;
  26.   sexp_gc_var1(cmd);
  27.   sexp_gc_preserve1(ctx,cmd);
  28.   cmd = sexp_list2(ctx, sexp_intern(ctx, "onclose", -1),sexp_make_integer(ctx, fd));
  29.   sexp_eval(ctx, cmd, NULL);
  30.   sexp_gc_release1(ctx);
  31. }
  32.  
  33. void onmessage(int fd, const unsigned char *msg, uint64_t size, int type)
  34. {  
  35.   sexp ctx = ctx2;
  36.   sexp_gc_var1(cmd);
  37.   sexp_gc_preserve1(ctx,cmd);
  38.   cmd = sexp_list3(ctx,sexp_c_string(ctx, msg, -1),
  39.          sexp_make_integer(ctx, size),sexp_make_integer(ctx, type));
  40.   cmd = sexp_cons(ctx,sexp_make_integer(ctx, fd), cmd);
  41.   cmd = sexp_cons(ctx,sexp_intern(ctx, "onmessage", -1),cmd);
  42.   sexp_eval(ctx, cmd, NULL);
  43.   sexp_gc_release1(ctx);  
  44. }
  45.  
  46. void init(void)
  47. {
  48.   sexp ctx = ctx2;
  49.   struct ws_events evs;
  50.   evs.onopen    = &onopen;
  51.   evs.onclose   = &onclose;
  52.   evs.onmessage = &onmessage;
  53.   ws_socket(&evs, 8080, 1);
  54.   printf("Server Initialized!\n");     
  55. }
  56.  
  57. int ws_start(void){
  58.  sexp ctx = ctx2;
  59. // sexp_scheme_init();
  60. // sexp_load_standard_env(ctx, NULL, SEXP_SEVEN);
  61. // sexp_load_standard_ports(ctx, NULL, stdin, stdout, stderr, 1);
  62.  setbuf(stdout, NULL);
  63.  init();    
  64. }
  65.  
  66. sexp sexp_ws_socket_stub (sexp ctx, sexp self, sexp_sint_t n, sexp arg0, sexp arg1, sexp arg2) {
  67.   sexp res;
  68.   if (! sexp_exact_integerp(arg1))
  69.     return sexp_type_exception(ctx, self, SEXP_FIXNUM, arg1);
  70.   if (! sexp_exact_integerp(arg2))
  71.     return sexp_type_exception(ctx, self, SEXP_FIXNUM, arg2);
  72.   res = sexp_make_integer(ctx, ws_socket(arg0, sexp_sint_value(arg1), sexp_sint_value(arg2)));
  73.   return res;
  74. }
  75.  
  76. sexp sexp_ws_sendframe_bin_stub (sexp ctx, sexp self, sexp_sint_t n, sexp arg0, sexp arg1, sexp arg2, sexp arg3) {
  77.   sexp res;
  78.   if (! sexp_exact_integerp(arg0))
  79.     return sexp_type_exception(ctx, self, SEXP_FIXNUM, arg0);
  80.   if (! sexp_stringp(arg1))
  81.     return sexp_type_exception(ctx, self, SEXP_STRING, arg1);
  82.   if (! sexp_exact_integerp(arg2))
  83.     return sexp_type_exception(ctx, self, SEXP_FIXNUM, arg2);
  84.   res = sexp_make_integer(ctx, ws_sendframe_bin(sexp_sint_value(arg0), sexp_string_data(arg1), sexp_uint_value(arg2), sexp_truep(arg3)));
  85.   return res;
  86. }
  87.  
  88. sexp sexp_ws_sendframe_txt_stub (sexp ctx, sexp self, sexp_sint_t n, sexp arg0, sexp arg1, sexp arg2) {
  89.   sexp res;
  90.   if (! sexp_exact_integerp(arg0))
  91.     return sexp_type_exception(ctx, self, SEXP_FIXNUM, arg0);
  92.   if (! sexp_stringp(arg1))
  93.     return sexp_type_exception(ctx, self, SEXP_STRING, arg1);
  94.   res = sexp_make_integer(ctx, ws_sendframe_txt(sexp_sint_value(arg0), sexp_string_data(arg1), sexp_truep(arg2)));
  95.   return res;
  96. }
  97.  
  98. sexp sexp_ws_start_stub (sexp ctx, sexp self, sexp_sint_t n) {
  99.   sexp res;
  100.   res = sexp_make_integer(ctx, ws_start());
  101.   return res;
  102. }
  103.  
  104.  
  105. sexp sexp_init_library (sexp ctx, sexp self, sexp_sint_t n, sexp env, const char* version, const sexp_abi_identifier_t abi) {
  106.  
  107.  
  108.   sexp sexp_ws_events_type_obj;
  109.   sexp_gc_var3(name, tmp, op);
  110.   if (!(sexp_version_compatible(ctx, version, sexp_version)
  111.         && sexp_abi_compatible(ctx, abi, SEXP_ABI_IDENTIFIER)))
  112.     return SEXP_ABI_ERROR;
  113.   sexp_gc_preserve3(ctx, name, tmp, op);
  114.   name = sexp_c_string(ctx, "ws_events", -1);
  115.   sexp_ws_events_type_obj = sexp_register_c_type(ctx, name, sexp_finalize_c_type);
  116.   tmp = sexp_string_to_symbol(ctx, name);
  117.   sexp_env_define(ctx, env, tmp, sexp_ws_events_type_obj);
  118.   op = sexp_define_foreign(ctx, env, "ws_socket", 3, sexp_ws_socket_stub);
  119.   if (sexp_opcodep(op)) {
  120.     sexp_opcode_return_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  121.     sexp_opcode_arg2_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  122.     sexp_opcode_arg3_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  123.   }  
  124.   op = sexp_define_foreign(ctx, env, "ws_sendframe_bin", 4, sexp_ws_sendframe_bin_stub);
  125.   if (sexp_opcodep(op)) {
  126.     sexp_opcode_return_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  127.     sexp_opcode_arg1_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  128.     sexp_opcode_arg2_type(op) = sexp_make_fixnum(SEXP_STRING);
  129.     sexp_opcode_arg3_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  130.     sexp_opcode_argn_type(op) = sexp_make_vector(ctx, SEXP_ONE, sexp_make_fixnum(SEXP_OBJECT));
  131.     sexp_vector_set(sexp_opcode_argn_type(op), SEXP_ZERO, sexp_make_fixnum(SEXP_BOOLEAN));
  132.   }
  133.   op = sexp_define_foreign(ctx, env, "ws_sendframe_txt", 3, sexp_ws_sendframe_txt_stub);
  134.   if (sexp_opcodep(op)) {
  135.     sexp_opcode_return_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  136.     sexp_opcode_arg1_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  137.     sexp_opcode_arg2_type(op) = sexp_make_fixnum(SEXP_STRING);
  138.     sexp_opcode_arg3_type(op) = sexp_make_fixnum(SEXP_BOOLEAN);
  139.   }
  140.   op = sexp_define_foreign(ctx, env, "ws_start", 0, sexp_ws_start_stub);
  141.   if (sexp_opcodep(op)) {
  142.     sexp_opcode_return_type(op) = sexp_make_fixnum(SEXP_FIXNUM);
  143.   }
  144.   sexp_gc_release3(ctx);
  145.  // sexp_env_define(ctx, env,sexp_intern(ctx,"ctx2",-1) , ctx);
  146.   ctx2 = ctx;  
  147.   return SEXP_VOID;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement