update
[aerie.git] / aerie.cpp
blob98e7ef469519fd79037680d1c1ced0a850aa3852
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 #ifdef __WIN32__
9 /**
10 * windows version
12 * \todo obs�uga b��d�w!
14 SOCKET win_start_server(int port)
16 WORD ver;
17 WSADATA data;
18 SOCKET s;
19 sockaddr_in addr;
22 ver = MAKEWORD(2,0);
23 if (WSAStartup(ver,NULL) != 0)
25 s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
27 memset(&addr, 0, sizeof(addr));
28 addr.sin_family = AF_INET;
29 addr.sin_port = htons(port);
30 addr.sin_addr.s_addr = htonl(INADDR_ANY);
32 int foo = 1;
33 setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&foo, sizeof(foo));
35 bind(s, (sockaddr*)&addr, sizeof(addr));
37 listen(s, CONF_TCP_QUEUE_SIZE);
39 return s;
42 return 0;
44 #endif // __WIN32__
46 /**
47 * start server on linux
49 SOCKET lin_server_start(int port)
51 SOCKET s;
52 sockaddr_in addr;
54 s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
56 memset(&addr, 0, sizeof(addr));
57 addr.sin_family = AF_INET;
58 addr.sin_port = htons(port);
59 addr.sin_addr.s_addr = htonl(INADDR_ANY);
61 int foo = 1;
62 setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&foo, sizeof(foo));
64 bind(s, (sockaddr*)&addr, sizeof(addr));
66 listen(s, CONF_TCP_QUEUE_SIZE);
68 return s;
71 int main(int argc, char* argv[])
73 lin_server_start(2206);
74 std::string s;
75 s = "test123_!@#$%^&*()_+ za���";
76 printf("[%s]\n", s.c_str());
77 s = urlencode(string(s));
78 printf("[%s]\n", s.c_str());
79 s = urldecode(s);
80 printf("[%s]\n", s.c_str());
81 return 0;
87 MAIN_LOOP:
88 server_loop -> open_socket -> socket_reader
90 socket_reader -> request_factory -> request
92 request -> queue(read data for request - type of task)
95 WORKER:
96 queue -> get needed data -> queue(send)
99 [task] : property of request(?)
100 class task {
101 bool run() - TRUE task is finished, FALSE needs to remain in queue
104 class getFileTask : public task {
105 bool run() {}
106 char* getData()
109 -- [code] ------------------------------------------------------------------------------
110 :: obsluga kolejki zadan od zadan
112 queue< pair<request,task> > tasks_queue;
113 while !empty(task_queue)
114 pair = front(tasks_queue)
115 if (pair.task.run())
116 requests_queue.add(pair.request)
117 else
118 tasks_queue.add(pair);
119 -- [/code] -----------------------------------------------------------------------------
122 -- [code] ------------------------------------------------------------------------------
123 :: obsluga czytania socketow
125 if (some_socket_need_to_be_read)
126 socket = find_socket_to_read()
127 reader = get_socket_reader(socket)
128 reader.read()
129 -- [/code] -----------------------------------------------------------------------------