=== NS Chat === Contributors: sergey-ivanov Tags: chat, websocket, messaging, real-time, workerman Requires at least: 5.8 Tested up to: 6.8 Requires PHP: 7.4 Stable tag: 1.0.1 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Real-time WebSocket chat for WordPress with user sync and message history. == Description == NS Chat Plugin enables real-time communication between WordPress users using WebSocket technology, powered by the Workerman library. Key Features: * Real-time private chat between users * Visual unread message indicators * Persistent chat history stored in the database * Lightweight modular JS + PHP architecture * Automatic migration and sync of WP users to chat system * Linux daemon service with SSL support for secure connections * Future-ready integration with NFS or AWS S3 for file upload/download Planned Features: * Message editing and deletion * Read receipt indicators (message seen) * File attachments with optional NFS or AWS S3 integration Ideal for community websites, intranets, or any platform requiring internal messaging without third-party services. **For integration help or consulting on adapting the plugin to your project, contact the developer at: ns.group.tech@gmail.com** == Installation == 1. Upload the plugin folder `ns-chat` to `/wp-content/plugins/`. 2. Activate the plugin through the ‘Plugins’ menu in WordPress. 3. After activation, a new page template called "NS Chat Template" will be available when creating pages. 4. Set up the WebSocket server on your Linux machine. == WebSocket Server Setup (Linux with SSL) == 1. **Create a systemd service file:** ```bash sudo vim /etc/systemd/system/websocket_server.service ``` 2. **Paste the following content:** ```bash [Unit] Description=WebSocket Server for NS Chat (SSL) After=network.target [Service] ExecStart=/usr/bin/php /file/to/path/yourdomain/wp-content/plugins/ns-chat/server.php start Restart=always RestartSec=25 User=www-data Group=www-data StandardOutput=file:/var/log/websocket_server.out.log StandardError=file:/var/log/websocket_server.err.log [Install] WantedBy=multi-user.target ``` 3. **Add SSL context in `server.php`:** ```php $context = [ 'ssl' => [ 'local_cert' => '/path/to/file.crt', 'local_pk' => '/path/to/file.key', 'verify_peer' => false, ] ]; ``` 4. **Set permissions for plugin folder:** ```bash sudo chown -R www-data:www-data /path/to/ns-chat/ sudo chmod -R 775 /path/to/ns-chat/ ``` 5. **Reload and start the daemon:** ```bash sudo systemctl daemon-reload sudo systemctl enable websocket_server --now sudo systemctl restart websocket_server sudo systemctl status websocket_server ``` 6. **Check logs if needed:** ```bash /var/log/websocket_server.out.log /var/log/websocket_server.err.log ``` == Custom Port Configuration == By default, the WebSocket server listens on **port 2346**. To use a different port: 1. Change the port in `server.php`: ```php $wsWorker = new Worker('websocket://0.0.0.0:2346', $context); ``` 2. Change the port in `ns-chat.php`: ```php $ws_port = 2346; ``` 3. You can check and change the port in `chat-ui.js`: ```js const port = nschat_data.wsPort || 2346; ``` 4. If the port is closed, then open a new port on your server's firewall: ```bash sudo ufw allow /tcp sudo firewall-cmd --permanent --add-port=/tcp sudo firewall-cmd --reload sudo iptables -A INPUT -p tcp --dport -j ACCEPT sudo iptables-save > /etc/iptables/rules.v4 ``` == Database Tables == The plugin creates and uses the following tables: - `wp_ns_chat_dialogues` - `wp_ns_chat_messages` - `wp_ns_chat_users` Tables are created and populated automatically on plugin activation. == User Synchronization == 1. **Initial migration** of all users from `wp_users` to `wp_ns_chat_users` on plugin activation. 2. **New registrations** are handled by: ```php add_action('user_register', 'ns_chat_add_user_on_registration'); ``` 3. **Profile updates** are synced via: ```php add_action('profile_update', 'ns_chat_update_user_data'); ``` You may bind these functions to custom hooks based on your app’s logic. == Frequently Asked Questions == = Does this work on shared hosting? = No, it requires a persistent PHP process for the WebSocket server. Use a VPS or dedicated server. = Is SSL required? = Yes. To use secure WebSocket (wss://), SSL certificates must be configured in `server.php`. = Can I use a different port than 2346? = Yes. See "Custom Port Configuration" section. = Can I get help with integration into my custom project? = Yes, you can contact the developer at ns.group.tech@gmail.com for custom integration support or consulting. = Does it support group chats? = Not yet. Planned in future versions. == Screenshots == 1. Messaging interface 2. Room list with unread indicators 3. Admin-side chat view (future) == Changelog == = 1.0 = * Initial public release. * One-on-one messaging with WebSocket daemon * User sync and message storage == Upgrade Notice == = 1.0 = First version. Set up the server manually if using on production. = 1.0.1 = * Fix: WebSocket auth via WordPress cookie; reliable user_id extraction in CLI worker. * Fix: No duplicate message for sender (no-echo from server). * Fix: Suppress REQUEST_METHOD notice in CLI by setting minimal $_SERVER vars. * Improve: Domain detection for WS (nschat_data.domainName) with safer fallback. = Upcoming = Planned support for: - Message editing and deletion - Read receipts - File upload/download via NFS or AWS == License == GPLv2 or later