Initial node code.
[KiwiIRC.git] / poll.php
CommitLineData
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