# Relay (Jitsi-Style Perfect Negotiation)

این نسخه بر اساس **متد رسمی P2P جیـتسی (Jitsi P2P Mesh)** طراحی و پیاده‌سازی شده است:

۱. **کد کلاینت متقارن (Symmetric)**: هر دو طرف اتصال از کدهای کاملاً یکسانی استفاده می‌کنند.
۲. **مذاکرهٔ بی‌نقص (Perfect Negotiation)**: با استفاده از استاندارد مدرن WebRTC، یکی از همتاها به‌صورت پویا نقش "مودب" (Polite) و دیگری نقش "نامودب" (Impolite) را می‌گیرد. در صورت تداخل ارسال درخواست‌ها (Glare/Collision)، همتای مودب درخواست خود را عقب می‌کشد (Rollback) تا اتصال بدون بن‌بست و بدون قطعی در سریع‌ترین زمان ممکن برقرار شود.
۳. **سیگنالینگ Real-time اختصاصی**: ارسال فوری پیام‌های SDP و ICE کاندیداها از طریق یک سرور سیگنالینگ فوق‌العاده سبک با Socket.IO.
۴. **حذف پردازش سرور رسانه‌ای (SFU)**: تصویر و صدا بدون واسطه به‌صورت مستقیم و همتا به همتا (Peer-to-Peer) بین مرورگرها منتقل می‌شود. این کار بار پردازشی سرور شما را صفر می‌کند و کیفیت رسانه کاملاً به اتصال اینترنت مستقیم طرفین بستگی دارد.

---

## قابلیت‌ها

- اتصال مستقیم و ایمن تصویر صفحه نمایش و صدا بین مرورگرها.
- بدون دوربین، چت، شمارندهٔ افراد، لیست جلسات و SQLite.
- آدرس مستقیم اتاق به فرمت: `https://share.example.com/mahmood`
- دکمه‌های میکروفون، اشتراک صفحه و خروج.

---

## الزامات نصب روی Ubuntu

- وب‌سرور آپاچی (Apache)
- یک دامنه که به IP سرور اشاره می‌کند، مانند `share.example.com`
- دسترسی root یا sudo
- فعال‌سازی HTTPS (بسیار مهم: بدون SSL مرورگرها اجازهٔ اتصال WebRTC را نمی‌دهند)

---

## نصب سریع

فایل ZIP پروژه را به سرور منتقل کرده و از حالت فشرده خارج کنید:

```bash
unzip relay-custom-sfu.zip
cd custom-sfu-version
```

سپس دستور نصب را با نام دامنهٔ خود اجرا کنید:

```bash
sudo bash install-ubuntu.sh share.example.com
```

این اسکریپت سرویس سیگنالینگ، پروکسی معکوس آپاچی، و فایروال سیستم را پیکربندی می‌کند.

در نهایت با این دستور گواهی رایگان SSL (HTTPS) را فعال کنید:

```bash
sudo certbot --apache -d share.example.com
```

---

## استفاده و تست

۱. در دستگاه اول آدرس `https://share.example.com/mahmood` را باز کنید.
۲. دکمهٔ «اشتراک صفحه» را بزنید و در پنجرهٔ باز شده حتماً تیک **Share system audio** را فعال کنید.
۳. میکروفون را در صورت نیاز با دکمهٔ میکروفون فعال کنید.
۴. در دستگاه دوم یا مرورگر دیگر دقیقاً همان لینک را باز کنید.
۵. دو کاربر به‌طور مستقیم و بدون واسطه از طریق متد P2P جیتسی متصل شده و تصویر صفحه و صدا ارسال خواهد شد.
