last version
[aerie.git] / aerie.cpp
blob28c975600440f7da7bfbbcde3e2566001c5e2c09
1 // aerie.cpp : Defines the entry point for the console application.
2 //
4 #include "stdafx.h"
5 #include "definitions.h"
6 #include "helpers.h"
8 /**
9 * windows version
11 * \todo obs³uga b³êdów!
13 SOCKET win_start_server(int port)
15 WORD ver;
16 WSADATA data;
17 SOCKET s;
18 sockaddr_in addr;
21 ver = MAKEWORD(2,0);
22 if (WSAStartup(ver,NULL) != 0)
24 s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
26 memset(&addr, 0, sizeof(addr));
27 addr.sin_family = AF_INET;
28 addr.sin_port = htons(port);
29 addr.sin_addr.s_addr = htonl(INADDR_ANY);
31 int foo = 1;
32 setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&foo, sizeof(foo));
34 bind(s, (sockaddr*)&addr, sizeof(addr));
36 listen(s, CONF_TCP_QUEUE_SIZE);
38 return s;
41 return 0;
44 int main(int argc, char* argv[])
46 std::string s;
47 s = "test123_!@#$%^&*()_+ za¿ó³æ";
48 printf("[%s]\n", s.c_str());
49 s = urlencode(string(s));
50 printf("[%s]\n", s.c_str());
51 s = urldecode(s);
52 printf("[%s]\n", s.c_str());
53 return 0;
59 MAIN_LOOP:
60 server_loop -> open_socket -> socket_reader
62 socket_reader -> request_factory -> request
64 request -> queue(read data for request - type of task)
67 WORKER:
68 queue -> get needed data -> queue(send)
71 [task] : property of request(?)
72 class task {
73 bool run() - TRUE task is finished, FALSE needs to remain in queue
76 class getFileTask : public task {
77 bool run() {}
78 char* getData()
81 -- [code] ------------------------------------------------------------------------------
82 :: obsluga kolejki zadan od zadan
84 queue< pair<request,task> > tasks_queue;
85 while !empty(task_queue)
86 pair = front(tasks_queue)
87 if (pair.task.run())
88 requests_queue.add(pair.request)
89 else
90 tasks_queue.add(pair);
91 -- [/code] -----------------------------------------------------------------------------
94 -- [code] ------------------------------------------------------------------------------
95 :: obsluga czytania socketow
97 if (some_socket_need_to_be_read)
98 socket = find_socket_to_read()
99 reader = get_socket_reader(socket)
100 reader.read()
101 -- [/code] -----------------------------------------------------------------------------