PDA

Просмотр полной версии : [Plugin] Socket



Osetin
29.03.2014, 15:38
Данный плагин позволяет вам использовать TCP\UDP сокеты. Каждый сокет принимает данные в отдельном потоке, это означает что сервер не будет зависать. После того как вы уничтожили сокет, поток будет остановлен.

Плагин может применяться во многих полезных идеях, вот некоторые из них:

- IRC echo бот
- Новая функция для RCON панели - чат на основе TCP-сокет сервера, схожий с GUIRCON
- Загрузка данных сервера через UDP протокол
- Работа с PHP-скриптами: логи/прием данных

Функции:

native Socket:socket_create(pType:TCP); // UDP и TCP
native socket_bind(Socket:id, ip[]); // UDP и TCP
native socket_connect(Socket:id, host[], port); // UDP и TCP
native socket_listen(Socket:id, port); // UDP и TCP
native socket_stop_listen(Socket:id); // UDP и TCP
native socket_destroy(Socket:id); // UDP и TCP
native socket_send(Socket:id, data[], len); // UDP и TCP
native is_socket_valid(Socket:id); // UDP и TCP
native socket_set_max_connections(Socket:id, max_remote_clients); // Только TCP
native socket_close_remote_client(Socket:id, remote_clientid); // Только TCP
native socket_sendto_remote_client(Socket:id, remote_clientid, data[]); // Только TCP
native socket_remote_client_connected(Socket:id, remote_clientid); // Только TCP
native get_remote_client_ip(Socket:id, remote_clientid, ip[]); // Только TCP

Коллбэки:

// Для клиента и сервера ( UDP протокол )
forward onUDPReceiveData(Socket:id, data[], data_len, remote_client_ip[], remote_client_port);
// Только для клиента ( TCP протокол )
forward onSocketAnswer(Socket:id, data[], data_len); // вызывается только когда подключены ( socket_connect() ), сервер отсылает данные
forward onSocketClose(Socket:id);
// Только для сервера ( TCP протокол )
forward onSocketReceiveData(Socket:id, remote_clientid, data[], data_len); // вызывается когда от клиента поступают данные
forward onSocketRemoteConnect(Socket:id, remote_client[], remote_clientid); // вызывается когда клиент подключается к нашему сокет серверу
forward onSocketRemoteDisconnect(Socket:id, remote_clientid); // вызывается когда клиент отключается от нашего сокет сервера

Пример:

new Socket:sock = socket_create(TCP);
if(is_socket_valid(sock)) {
socket_connect(sock, "foco.us.irc.tl", 6667); // Подключаемся
socket_send(sock, "NICK TestBot\r\n"); // Устанавливаем никнейм
socket_send(sock, "USER TestBot - - :TestBot\r\n"); // Устанавливаем юсеру никнейм бота
socket_send(sock, "MODE TestBot +B\r\n"); // Сообщаем серверу что это бот
socket_send(sock, "JOIN #test_channel\r\n"); // Присоединяем его к нашему каналу
}

// теперь этот коллбэк будет получать все входящие данные
public onSocketAnswer(Socket:id, data[])
{
}

Ссылки:
Windows: http://files.g-stylezzz.com/socket_plugin/v01b/socket.dll
Linux: http://files.g-stylezzz.com/socket_plugin/v01b/socket.so
socket.inc: http://files.g-stylezzz.com/socket_plugin/socket.inc
Source (0.1b): http://files.g-stylezzz.com/socket_plugin/socket_v01b_src.rar

v0.2a Source: (SSL version):
Source browser: https://github.com/pBlueG/Socket

Автор: BlueG

Salvacore
02.04.2014, 10:25
Классно.

Trender
10.05.2014, 13:52
Перезалей.

Osetin
28.05.2014, 19:47
Перезалей.

Обновил ссылки

ArtemkO
29.05.2014, 15:07
Йа нуб, так и не понял.
При создании сокета подключается бот, который будет обрабатывать что-то в отдельном потоке?