=== 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 <your-port>/tcp
sudo firewall-cmd --permanent --add-port=<your-port>/tcp
sudo firewall-cmd --reload
sudo iptables -A INPUT -p tcp --dport <your-port> -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
