programmis / socket-chat
Simple socket chat
Installs: 1 553
Dependents: 1
Suggesters: 0
Security: 0
Stars: 5
Watchers: 3
Forks: 3
Open Issues: 0
Type:extra
Requires
- php: >=7
- programmis/colorful-logger: 0.*
- react/socket: ^0.4.3
Requires (Dev)
- codeception/c3: 2.*
- codeception/codeception: 2.*
- codeception/specify: 0.*
- codeception/verify: 0.*
- phpunit/phpunit: ^4.8
- squizlabs/php_codesniffer: ^2.3
README
Installing
1) Download composer:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
2) Install:
php composer.phar require programmis/socket-chat
Starting chat server
$loader = require __DIR__ . '/vendor/autoload.php'; $server = new chat\Server(); $server->start();
or in your project
class Server extends \chat\Server { /** @inheritdoc */ public static function getConfigClass() { return "Your config class implemented from \chat\interfaces\ConfigInterface or extend from \chat\libs\Config"; //return MyConfig::class; } }
and in your config class
class MyConfig extends \chat\libs\Config { //you can override any chat class }
and to start
$server = new your\project\namespace\Server(); $server->start(); //or for you daemon $server->tick(); //in your daemon loop method
simple daemon provider and how to connect this chat to YII2 framework
popular methods
UserProcessor:createUser //maybe init user from your database by $connection_info data User:findOne //find and return user in your database by user id User:getAccessList //return user ids list of access to send messages User:getSendRight //return user right for send messages User:getInfo //return array with user info User:onConnect //called if user connect User:onDisconnect //called if user disconnect User:onChangeRecipient //called if user change recipient Message:getHistory //find and return users messages in your database Message:beforeSend //called before send message Message:afterSend //called after send message Chat:sendMessageText //you may send any text message to user
Client side
<script src="js/socketChat.js"></script>
Init java constants
<script type="application/javascript"> $(function () { <?= Server::fillJavaConstants(); ?> }); </script>
Settings
socketChat.connection_type = "Maybe 'ws' or 'wss'" socketChat.current_user_id = "Current user id in chat"; socketChat.socket_url = "You're server address : and port"; socketChat.send_on_enter = "If this true, then all messages sending by press on enter key, ctrl+enter default" socketChat.recipient_id = 'Message recipient id, you can fill it before send messages'; socketChat.room = "Chat room name is required fill"; socketChat.hash = "You're secret hash for processing with UserProcessor"; socketChat.user_typing_timeout = "For auto disable user typing status"; socketChat.message_history_period = "For default request message history";
Functions
socketChat.open(); //open connect with server socketChat.close(); //close connect with server socketChat.setMessageAreaId(id); //set textarea id for messages socketChat.send(); //send message from message_area to socketChat.recipient_id socketChat.getUserList(); //get all users in current room socketChat.getUserInfo(user_id); //get info about user socketChat.getMessageHistory(with_user_id, period); //get all messages for current user and with_user_id by period
Events
socketChat.onConnect //called if chat connected to server socketChat.onDisconnect //call if chat disconnected with server socketChat.onMessageRender //called if render message with "message" in parameter socketChat.onMessageListRender //called if render message list with "message_list" in parameter socketChat.onUserConnect //called if user connect to chat with "user" in parameter socketChat.onUserDisconnect //called if user disconnect from chat with "user" in parameter socketChat.onUserRemoved //called if user removed from chat with "user" in parameter socketChat.onAboutMeInfo //about you info socketChat.onUserInfo //called if received user info with "user" in parameter socketChat.onUserList //called if user list received with "user_list" in parameter socketChat.onUserTypingStart //called if user start typing with "user_id" in parameter socketChat.onUserTypingEnd //called if user end typing with "user_id" in parameter
For nginx ssl encrypt
Server::$port = 1337; Server::$proxy_port = 1338; Server::$proxy_connection_type = 'wss'; server { server_name localhost _; listen 1338 ssl; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; root /home/project.ru/web; location / { proxy_pass http://127.0.0.1:1337; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
How to enable another config param see example how to connect this chat to YII2 framework
For example see index.php and socketChatDemo.js files
Sorry for my english