-
Notifications
You must be signed in to change notification settings - Fork 11
/
socketio.class.php
69 lines (59 loc) · 2.13 KB
/
socketio.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/*
TODO: сервер Массовая отправка SocketIO->emit(array(user1,user2,user3))
TODO: сервер Поддержка групп (SocketIO->register_group('group_id'[, user_id])
*/
class SocketIO extends UniversalSingletoneHelper
{
public $url;// Облачный сервер по умолчанию
public $userid;// = md5(session_id());
function __construct()
{
//Установка значений по умолчанию
if(!defined('SOCKET_IO_SERVER')){
define('SOCKET_IO_SERVER','http://cloud.doit-cms.ru');
}
$this->url = SOCKET_IO_SERVER; // Облачный сервер по умолчанию
$this->userid = md5(session_id());
}
/**
* Генерация запроса к серверу по чистому GET запросу; урезанный вариант
*/
function emit_get($userid, $event, $data=array()){
if (is_string($data)){
$string = $data;
$data=array();
$data['_type'] = 'string';
$data['_data'] = $string;
}
if(is_array($userid)){
$userid = $userid[0];
}
$data['id'] = $userid;
$data['message'] = $event;
print $this->url . '/emit?'. http_build_query($data);
return file_get_contents($this->url . '/emit?'. http_build_query($data));
}
/**
* Более гибкая отправка по POST запросу без ограничений по структуре данных
*/
function emit($userid, $event, $data=array()){
if( function_exists("curl_init") && $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, $this->url.'/emit');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
$post_data=array();
$post_data['id'] = $userid;
$post_data['message'] = $event;
$post_data['data'] = json_encode($data);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
$out = curl_exec($curl);
print curl_error ($curl);
curl_close($curl);
return $out;
}else{
//fallback, если остальное не работает
return $this->emit_get($userid, $event, $data);
}
}
}