Advertisement
Fedcomp

Untitled

Nov 27th, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <sockets_hz>
  4.  
  5. #define DEBUG
  6.  
  7. #pragma tabsize 0
  8.  
  9. #define PREFIX "[WAMod]"
  10. #define WAMOD_LINESIZE 2048 // Я бы даже сказал что многовато, но на ваш вкус. Если поставить 300, то можно добиться понижения потребления памяти. Я поставил 2048 чтобы удовлетворить любую школоту.
  11.  
  12. new g_ListeningSocket // Наш шпион сокет.
  13.  
  14. new Array:HTML_TEMPLATE // HTML Шаблон в памяти
  15.  
  16. public plugin_init() {
  17.         register_plugin("WAMod", "0.1-indev", "Fedcomp")
  18.        
  19.         read_template()
  20.         init_my_socket()
  21. }
  22.  
  23. public plugin_end ()
  24. {
  25.         socket_close(g_ListeningSocket)
  26.         ArrayDestroy(HTML_TEMPLATE)
  27. }
  28.  
  29. // ======== UTILS ============ //
  30.  
  31. // Получаем порт
  32. // FIXME: Отдельный квар для порта
  33. get_port(){
  34.     return get_cvar_num("port")
  35. }
  36.  
  37. // ======= </UTILS> ========== //
  38.  
  39. // Читаем шаблон в память
  40. read_template(){
  41.  
  42.     HTML_TEMPLATE = ArrayCreate(WAMOD_LINESIZE)
  43.  
  44.     new path[255]
  45.    
  46.     // Получаем путь к шаблону
  47.     get_configsdir(path, charsmax(path))
  48.     format(path, charsmax(path), "%s/wamod/wamod.html", path)
  49.  
  50.     // Если файла с шаблоном нет то плагин отказывается работать
  51.     if (!file_exists(path))
  52.         set_fail_state("wamod.html is not found!!")
  53.    
  54.     // Открываем шаблон на чтение
  55.     new i_filehandle = fopen(path,"rb")
  56.     new szBuffer[2048]
  57.    
  58.     while(!feof(i_filehandle))
  59.     {
  60.         fgets(i_filehandle, szBuffer, charsmax(szBuffer));
  61.         trim(szBuffer);
  62.        
  63.         ArrayPushString(HTML_TEMPLATE,szBuffer)
  64.     }
  65.    
  66.     fclose(i_filehandle)
  67. }
  68.  
  69. // Создаем сокет на прослушку. Отсылаем телефонные переговоры в США
  70. init_my_socket() {
  71.     new error //you're the error
  72.     g_ListeningSocket = socket_listen("0.0.0.0", get_port(),SOCKET_TCP,error)
  73.     socket_unblock(g_ListeningSocket)
  74.     server_print("%s LISTENNING ANY IP ON PORT %d", PREFIX, get_port())
  75.    
  76.     // Делаем таймер на прослушку телефонных переговоров. Т.е таймер который раз в заданное время будет проверять на новые соединения
  77.     set_task(0.1,"incoming_connection",0,"",0,"b")
  78. }
  79.  
  80.  
  81. public incoming_connection() {
  82.     new connection;
  83.     if((connection = socket_accept(g_ListeningSocket)) < 0) return
  84.        
  85.     #if defined DEBUG
  86.     server_print("%s New Connection", PREFIX)
  87.     #endif
  88.    
  89.     // Создаем массив в котором будет уже сформированный html который можно отправлять
  90.     new Array:html_reply = ArrayCreate(WAMOD_LINESIZE)
  91.    
  92.     // Calculating content lenght:
  93.     new i_arr_size = ArraySize(HTML_TEMPLATE),
  94.         content_size = 0
  95.    
  96.     server_print("%s Template lines: %i", PREFIX, i_arr_size)
  97.    
  98.     for(new i=0; i < i_arr_size; i++){
  99.         new szBuffer[WAMOD_LINESIZE]
  100.         ArrayGetString(HTML_TEMPLATE, i, szBuffer, WAMOD_LINESIZE);
  101.         ArrayPushString(html_reply, szBuffer)
  102.         content_size += strlen(szBuffer)
  103.     }
  104.    
  105.     server_print("%s content size: %i", PREFIX, content_size)
  106.    
  107.     new http_response[1024]
  108.        
  109.     format(http_response, charsmax(http_response),
  110.         "%s%s%s%s%i%s%s"                                ,
  111.         "HTTP/1.0 200 OK^r^n"                       ,
  112.         "Server: WAMod barely working server^r^n"   ,
  113.         //"Connection: keep-alive, close^r^n"                       ,
  114.         "Accept-Ranges: bytes^r^n"                  ,
  115.         "Content-Length: ", content_size, "^r^n"                ,
  116.         "Content-Type: text/html^r^n^r^n"          
  117.     )
  118.    
  119.     socket_send(connection, http_response, strlen(http_response))
  120.    
  121.     for(new i=0; i < i_arr_size; i++){
  122.         socket_send(connection,
  123.         ArrayGetStringHandle(HTML_TEMPLATE, i),
  124.         WAMOD_LINESIZE)
  125.     }
  126.  
  127.    
  128.  
  129.     //socket_send(connection, http_response, strlen(http_response))
  130.     //send_formatted(connection)
  131.     //socket_send(connection, html_reply, strlen(html_reply))
  132.     socket_close(connection)
  133.     ArrayDestroy(html_reply)
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement