Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <amxmisc>
- #include <sockets_hz>
- #define DEBUG
- #pragma tabsize 0
- #define PREFIX "[WAMod]"
- #define WAMOD_LINESIZE 2048 // Я бы даже сказал что многовато, но на ваш вкус. Если поставить 300, то можно добиться понижения потребления памяти. Я поставил 2048 чтобы удовлетворить любую школоту.
- new g_ListeningSocket // Наш шпион сокет.
- new Array:HTML_TEMPLATE, // HTML Шаблон в памяти
- Array:html_reply // И массив в котором будет готовиться html ответ
- public plugin_init() {
- register_plugin("WAMod", "0.1-indev", "Fedcomp")
- read_template()
- init_my_socket()
- }
- public plugin_end ()
- {
- socket_close(g_ListeningSocket)
- ArrayDestroy(HTML_TEMPLATE)
- ArrayDestroy(html_reply)
- }
- // ======== UTILS ============ //
- // Получаем порт
- // FIXME: Отдельный квар для порта
- get_port(){
- return get_cvar_num("port")
- }
- // ======= </UTILS> ========== //
- // Читаем шаблон в память
- read_template(){
- HTML_TEMPLATE = ArrayCreate(WAMOD_LINESIZE)
- new path[255]
- // Получаем путь к шаблону
- get_configsdir(path, charsmax(path))
- format(path, charsmax(path), "%s/wamod/wamod.html", path)
- // Если файла с шаблоном нет то плагин отказывается работать
- if (!file_exists(path))
- set_fail_state("wamod.html is not found!!")
- // Открываем шаблон на чтение
- new i_filehandle = fopen(path,"rb")
- new szBuffer[2048]
- while(!feof(i_filehandle))
- {
- fgets(i_filehandle, szBuffer, charsmax(szBuffer));
- trim(szBuffer);
- ArrayPushString(HTML_TEMPLATE,szBuffer)
- }
- html_reply = ArrayCreate(WAMOD_LINESIZE, ArraySize(HTML_TEMPLATE) )
- fclose(i_filehandle)
- }
- // Создаем сокет на прослушку. Отсылаем телефонные переговоры в США
- init_my_socket() {
- new error //you're the error
- g_ListeningSocket = socket_listen("0.0.0.0", get_port(),SOCKET_TCP,error)
- socket_unblock(g_ListeningSocket)
- server_print("%s LISTENNING ANY IP ON PORT %d", PREFIX, get_port())
- // Делаем таймер на прослушку телефонных переговоров. Т.е таймер который раз в заданное время будет проверять на новые соединения
- set_task(0.05,"incoming_connection",0,"",0,"b")
- }
- public incoming_connection() {
- new connection;
- if((connection = socket_accept(g_ListeningSocket)) < 0) return
- #if defined DEBUG
- server_print("%s New Connection", PREFIX)
- #endif
- // Создаем массив в котором будет уже сформированный html который можно отправлять
- new Array:html_reply = ArrayCreate(WAMOD_LINESIZE)
- // Calculating content lenght:
- new i_arr_size = ArraySize(HTML_TEMPLATE),
- content_size = 0
- server_print("%s Template lines: %i", PREFIX, i_arr_size)
- for(new i=0; i < i_arr_size; i++){
- new szBuffer[WAMOD_LINESIZE]
- ArrayGetString(HTML_TEMPLATE, i, szBuffer, WAMOD_LINESIZE);
- ArrayPushString(html_reply, szBuffer)
- content_size += strlen(szBuffer)
- }
- server_print("%s content size: %i", PREFIX, content_size)
- new http_response[1024]
- format(http_response, charsmax(http_response),
- "%s%s%s%s%i%s%s" ,
- "HTTP/1.0 200 OK^r^n" ,
- "Server: WAMod barely working server^r^n" ,
- //"Connection: keep-alive, close^r^n" ,
- "Accept-Ranges: bytes^r^n" ,
- "Content-Length: ", content_size, "^r^n" ,
- "Content-Type: text/html^r^n^r^n"
- )
- socket_send(connection, http_response, strlen(http_response))
- for(new i=0; i < i_arr_size; i++){
- new szBuffer[WAMOD_LINESIZE]
- ArrayGetString(HTML_TEMPLATE, i, szBuffer, WAMOD_LINESIZE);
- socket_send(connection, szBuffer, strlen(szBuffer))
- }
- //socket_send(connection, http_response, strlen(http_response))
- //send_formatted(connection)
- //socket_send(connection, html_reply, strlen(html_reply))
- set_task(0.5,"release_connection",connection)
- ArrayClear( html_reply )
- }
- public release_connection(connection){
- socket_close(connection)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement