Commit | Line | Data |
---|---|---|
54f4a22e D |
1 | <?php\r |
2 | \r | |
3 | require(dirname(__FILE__).'/config.php');\r | |
4 | require(dirname(__FILE__).'/common.php');\r | |
5 | require(dirname(__FILE__).'/class_session.php');\r | |
6 | \r | |
7 | $starttime = time();\r | |
8 | \r | |
9 | ############################################\r | |
10 | ## New sessions\r | |
11 | ############################################\r | |
12 | \r | |
13 | // If no session has been specified, start a new one\r | |
14 | if(empty($_POST)){\r | |
15 | $new_session = SESSIONS::create($_SERVER['REMOTE_ADDR']);\r | |
16 | \r | |
17 | // Session creation fail?\r | |
18 | if($new_session === false){\r | |
19 | die(gen_response(array('error'=>'session_error')));\r | |
20 | }\r | |
21 | \r | |
22 | // Session create OK, yay\r | |
23 | die(gen_response(array('session_id'=>$new_session)));\r | |
24 | }\r | |
25 | \r | |
26 | \r | |
27 | \r | |
28 | ############################################\r | |
29 | ## Existing sessions\r | |
30 | ############################################\r | |
31 | \r | |
32 | // Quit here if a session hasn't been specified\r | |
33 | if(!isset($_POST['sid']) || empty($_POST['sid'])){\r | |
34 | die(gen_response(array('error'=>'session_not_set')));\r | |
35 | }\r | |
36 | \r | |
37 | $session_id = $_POST['sid'];\r | |
38 | \r | |
39 | // Make sure the session exists\r | |
40 | if(!SESSIONS::exists($session_id)){\r | |
41 | die(gen_response(array('error'=>'no_session')));\r | |
42 | }\r | |
43 | \r | |
44 | // Connect to the IRC session\r | |
45 | $ses = SESSIONS::open($session_id);\r | |
46 | if(!$ses){\r | |
47 | die(gen_response(array('error'=>'session_error')));\r | |
48 | }\r | |
49 | \r | |
50 | if(!isset($_POST['data'])){\r | |
51 | // Read any commands to be sent to the web client\r | |
52 | $data = array();\r | |
53 | \r | |
54 | /* This was used for blocking the first call which caused a wait of timeout seconds if the user quits\r | |
55 | // Make this read block\r | |
56 | $tmp = json_decode(trim(SESSIONS::read($ses, true)),1);\r | |
57 | if($tmp != null) $data[] = $tmp;\r | |
58 | */\r | |
59 | \r | |
60 | // Unblocked reads just incase only 1 message is actually available\r | |
61 | $start_time = time();\r | |
62 | while(time() - $start_time < $config['max_time_per_poll'] && count($data) == 0 && !connection_aborted()){\r | |
63 | for($i=0; $i<$config['messages_per_poll']; $i++){\r | |
64 | if(connection_aborted()){\r | |
65 | deb("Connection aborted");\r | |
66 | break;\r | |
67 | }\r | |
68 | deb("Polling..");\r | |
69 | $tmp = json_decode(trim(SESSIONS::read($ses, false)),1);\r | |
70 | if($tmp != null){\r | |
71 | $data[] = $tmp;\r | |
72 | } else {\r | |
73 | break;\r | |
74 | }\r | |
75 | \r | |
76 | echo " ";\r | |
77 | flush();\r | |
78 | }\r | |
79 | \r | |
80 | if(count($data) == 0) sleep(1);\r | |
81 | }\r | |
82 | deb("Polled");\r | |
83 | \r | |
84 | if(!empty($data)){\r | |
85 | echo gen_response($data);\r | |
86 | } else {\r | |
87 | echo gen_response(array());\r | |
88 | }\r | |
89 | } else {\r | |
90 | fwrite($ses, $_POST['data']);\r | |
91 | }\r | |
92 | \r | |
93 | // We're done here, close the session connection\r | |
94 | SESSIONS::close($ses);\r | |
95 | \r | |
96 | \r | |
97 | \r | |
98 | \r | |
99 | \r | |
100 | \r | |
101 | \r | |
102 | \r | |
103 | \r | |
104 | ############################################\r | |
105 | ## Functions\r | |
106 | ############################################\r | |
107 | \r | |
108 | function gen_response($data){\r | |
109 | return json_encode($data);\r | |
110 | }\r |