diff --git a/README.md b/README.md
index 2eb9df0..369f5d3 100644
--- a/README.md
+++ b/README.md
@@ -8,12 +8,12 @@ görüşme yazılımları için gerçek zamanlı altyapı sağlamak amacıyla ku
Sunucu cihazları sanallaştırdığı için eşler birbirlerinin gerçek IP adresini veya
cihaz bilgisini bilmeden düşük gecikmeli, çift yönlü iletişim kurabilir.
-## Durum (Go engine, v0.1.0 paritesi ✅)
+## Durum (Go engine, v1.0.0)
Motor Node.js'ten **Go** ile yeniden yazıldı. Concurrency modeli goroutine +
`sync.RWMutex` + bağlantı başına tek-yazıcı (actor) deseni üzerine kuruludur;
-Node.js'teki "leave-while-send" race condition ve EventPool promise takılması
-(#33) giderildi.
+Node.js'teki "leave-while-send" race condition ve EventPool promise takılması (#33)
+giderildi. Yük testi: 150 bağlantı, ~210 k msg/s relay, RSS ~43 MB.
| Özellik | Durum |
|---|---|
@@ -24,40 +24,38 @@ Node.js'teki "leave-while-send" race condition ve EventPool promise takılması
| Veri senkronizasyonu (data/sync, sync/pool) | ✅ |
| Bildirim + suit yanıtı (notify/send, notify/reply) | ✅ |
| 3. parti sunucu köprüsü (bridge) | ✅ |
+| Sanal IP / numara / kısa kod + alt ağ | ✅ |
+| WebRTC kütüphanesi (perfect negotiation, çoklu track) | ✅ |
+| Studio UI (Miller kolonlar) | ✅ |
| İkili çerçeveleme (binary framing) | ⏳ 2.5.0 |
-| Studio (akış/WebRTC sunucusu) | ⏳ 2.0.0 |
+| SRS entegrasyonu (binlerce izleyici) | ⏳ 2.0.0 |
## Kurulum ve çalıştırma
### Gereksinimler
- Go 1.22+
-- (Opsiyonel) TypeScript — SDK derlemek için `npm run build`
### Sunucuyu başlat
```bash
-# Bağımlılıklar
go mod tidy
-
-# Çalıştır (varsayılan: 0.0.0.0:7707)
-go run .
-
-# Yapılandırma env değişkenleriyle:
-MWSE_ADDR=:8080 \
-MWSE_OUTBOUND_BUFFER=2048 \
-MWSE_MAX_MESSAGE_SIZE=33554432 \
go run .
+# Varsayılan: 0.0.0.0:7707
```
### Ortam değişkenleri
| Değişken | Varsayılan | Açıklama |
|---|---|---|
-| `MWSE_ADDR` | `:7707` | Dinleme adresi |
+| `MWSE_HOST` | `0.0.0.0` | Bind adresi |
+| `MWSE_PORT` | `7707` | Dinleme portu |
+| `MWSE_PUBLIC_DIR` | `./public` | Statik dosyalar (`/status.xml` vb.) |
+| `MWSE_SDK_DIR` | `./sdk` | ES modül SDK (`/sdk/`) |
| `MWSE_OUTBOUND_BUFFER` | `1024` | Bağlantı başına gönderim kuyruğu |
| `MWSE_MAX_MESSAGE_SIZE` | `16777216` | Maksimum gelen frame boyutu (bayt) |
| `MWSE_PING_INTERVAL` | `10s` | Heartbeat ping aralığı |
+| `MWSE_SHUTDOWN_TIMEOUT` | `10s` | Graceful shutdown bekleme süresi |
| `BRIDGE_APPROVE_URL` | — | Bağlantı onay URL'i (3. parti köprü) |
| `BRIDGE_TRIGGER_URL` | — | Suit yanıtı push URL'i |
| `BRIDGE_INBOX` | — | `1` ile inbox'ı etkinleştir |
@@ -70,22 +68,17 @@ go test -race ./...
## Frontend SDK entegrasyonu
-SDK, TypeScript ile yazılmış ve derlenmiş JavaScript olarak `/script`
-endpoint'inden sunulur. Herhangi bir bundler gerekmez.
+SDK saf vanilla ES modülü olarak `/sdk/` endpoint'inden sunulur. Bundler gerekmez;
+native `import` ile çalışır.
```html
-
-
+
```
+### WebRTC (P2P ses/video/dosya)
+
+```js
+import MWSE from '/sdk/index.js';
+import { MediaSources } from '/sdk/webrtc/index.js';
+
+const mwse = new MWSE();
+
+mwse.me.on('accepted/pair', async peer => {
+ const polite = mwse.me.socketId < peer.socketId;
+ peer.rtc.connect({ polite });
+
+ // Kamera + mikrofon
+ const stream = await MediaSources.cameraAndMic();
+ peer.rtc.addStream('cam', stream);
+
+ // Gelen video/ses
+ peer.rtc.on('track', (track, streams) => {
+ const video = document.createElement('video');
+ video.srcObject = streams[0];
+ video.autoplay = true;
+ document.body.appendChild(video);
+ });
+
+ // Dosya gönderme
+ await peer.rtc.sendFile(file);
+});
+```
+
+### Studio UI
+
+```js
+import MWSE from '/sdk/index.js';
+import Studio from '/sdk/studio/index.js';
+
+const mwse = new MWSE();
+const studio = new Studio(mwse, '#app');
+mwse.on('scope', () => studio.mount());
+```
+
## Demo dosyaları
-| Demo | Yol | Açıklama |
+Sunucu çalışırken `http://localhost:7707/demos/` altında:
+
+| Demo | Dosya | Açıklama |
|---|---|---|
-| Chat | `/demos/chat.html` | ~20 satır JS ile odalı sohbet |
-| Sesli görüşme | `/demos/audio.html` | P2P WebRTC ses (eşler arası) |
-| Video görüşme | `/demos/video.html` | P2P WebRTC video (kamera ızgara görünümü) |
+| Chat | `chat.html` | ~20 satır JS ile odalı gerçek zamanlı sohbet |
+| Sesli görüşme | `audio.html` | P2P WebRTC mikrofon (çift yönlü) |
+| Video görüşme | `video.html` | P2P WebRTC kamera ızgara görünümü |
## API kontrolü (/api)
-API anahtarı al, sonra kullan:
-
```bash
-# Anahtar al
+# API anahtarı al
KEY=$(curl -s -X POST localhost:7707/api/auth/key \
-H 'Content-Type: application/json' \
-d '{"domain":"myapp"}' | jq -r .key)
@@ -129,33 +162,53 @@ curl -s -X POST localhost:7707/api/bridge/inbox \
## Mimari
```
-Client (WebSocket)
+Tarayıcı (WebSocket)
│
▼
-ws.Hub (router + registry)
- ├─ services/auth.go Pairing, IP adresi, erişilebilirlik
- ├─ services/room.go Oda oluşturma / yönetimi
+ws.Hub — router + client registry
+ ├─ services/yourid.go Bağlantı açılınca wsts/hello + id sinyalleri
+ ├─ services/auth.go Pairing, erişilebilirlik
+ ├─ services/room.go Oda oluşturma / yönetimi
├─ services/datatransfer.go pack/to, request/to, response/to tünelleri
- ├─ services/notify.go Store-and-forward bildirim + suit yanıtı
- ├─ services/datastore.go Aktif senkronizasyon (CRUD broadcast)
- │ Pasif senkronizasyon (hash-dedup merge pool)
- ├─ services/bridge.go 3. parti sunucu inbox (bridge/send)
- └─ services/ippressure.go Sanal IP basıncı
+ ├─ services/notify.go Store-and-forward bildirim + suit yanıtı
+ ├─ services/datastore.go Aktif & pasif veri senkronizasyonu
+ ├─ services/bridge.go 3. parti sunucu inbox
+ ├─ services/ippressure.go Sanal IP / numara / kısa kod + alt ağ (/24)
+ └─ services/session.go Oturum bayrakları (readable/writable/pairinfo)
httpserver
- ├─ GET/POST /api/* Kontrol düzlemi (API anahtarı, oda/istemci yönetimi)
- ├─ POST /api/bridge/inbox 3. parti sunucu inbox boşaltma
- └─ /* (WebSocket değilse) SDK (script/index.js) + statik dosyalar
+ ├─ GET /sdk.js → /sdk/index.js (301 yönlendirme)
+ ├─ GET /sdk/* ES modül SDK dosyaları
+ ├─ GET /demos/* Demo HTML dosyaları
+ ├─ GET|POST /api/* Kontrol düzlemi
+ └─ GET /* Statik public/ dosyaları
+
+sdk/
+ ├─ index.js MWSE ana sınıf (bağlantı + sinyal yönlendirme)
+ ├─ webrtc/ WebRTC kütüphanesi
+ │ ├─ index.js RTCEngine (PeerConnection yönetimi, ICE restart)
+ │ ├─ PeerConnection.js RTCPeerConnection wrapper + full event izleme
+ │ ├─ Negotiator.js Perfect negotiation (RFC 8829)
+ │ ├─ StreamManager.js addStream/replaceTrack/setEncodings
+ │ ├─ DataChannel.js Birincil veri kanalı + oto-yeniden bağlanma
+ │ ├─ MediaSources.js getUserMedia/getDisplayMedia/AudioContext fabrikaları
+ │ ├─ FileSender.js Paralel DataChannel dosya transferi
+ │ └─ CanvasCompositor.js Çoklu video track birleştirme (grid/pip/focus)
+ └─ studio/
+ ├─ index.js Studio UI giriş noktası
+ ├─ ColumnView.js Miller kolon yöneticisi
+ ├─ Column.js Tek kolon (başlık + arama + liste)
+ └─ style.css Koyu masaüstü teması
```
## Güvenlik
-- Bağlı cihazların mesajları **sokete iletilmeden önce** kullanıcılar tarafından
- manipüle edilebilir; MWSE bu doğrulamayı yapmaz. Hassas veriler için
- uygulama katmanında imzalama/şifreleme ekleyin.
+- İstemci mesajları **uygulama katmanında doğrulanmaz**. Hassas veriler için
+ imzalama/şifreleme ekleyin.
- 3. parti köprü (`BRIDGE_APPROVE_URL`) kullanılıyorsa bağlantı onayı uygulama
- sunucusuna delege edilir (fail-closed: onay gelmezse bağlantı reddedilir).
+ sunucusuna delege edilir (fail-closed).
+- `.gitea-auth.json` dosyası commit'e asla girmez (`.gitignore`'da).
## Geliştirici dökümanı
-Tüm wiki sayfaları:
+Wiki: