88 lines
4.6 KiB
Markdown
88 lines
4.6 KiB
Markdown
# Peer to Peer chat Specifikáció
|
|
|
|
A projektem célja egy Peer to Peer chat alkalmazás létrehozása. A lényege az, hogy több gép egy hálózatot alkotva kommunikál egymással,azaz nincs egy központi szerver,ami az üzeneteket továbbítja a klienseknek,hanem minden üzenet közvetlenül megy a feladótól a címzettig.
|
|
|
|
## A program futásának leírása
|
|
|
|
1. Konfigurációs fájl betöltése
|
|
2. Azonosító létrehozása
|
|
3. „Hallgató” socket létrehozása, a hallgatás elindítása
|
|
4. Csatlakozás a meghatározott peerekhez
|
|
5. Felhasználói felület létrehozása
|
|
6. A program fő ciklusának elindítása
|
|
|
|
### A program kimenete
|
|
|
|
Minden egyes kiíráskor a program kiírja az aktuális dátumot és időt a következő formátumban:`[ÉÉÉÉ.HH.NN ÓÓ:PP:MM]`
|
|
|
|
A program ezekben az esetekben ír ki a képernyőre (és mindezt elmenti a `log.txt` fájlba):
|
|
|
|
1. Inicializáláskor
|
|
2. Amikor egy peer csatlakozik
|
|
3. Amikor egy üzenet érkezik/el lett küldve
|
|
|
|
## Konfigurációs fájl
|
|
|
|
A konfigurációs fájl arra szolgál, hogy a felhasználó igényei szerint beállíthassa,hogy hogyan működjön a program.Ez a fájl a `Config.ini`. Itt a különböző értékek soronként `kulcs=érték` formátumban vannak.
|
|
|
|
Ha egy sor kettős kereszttel(`#`) kezdődik,akkor azt a program kommentnek veszi.
|
|
|
|
> Példa:
|
|
>
|
|
> ```bash
|
|
> #Becenév
|
|
> nickname=Balazs
|
|
> #A program által használt port
|
|
> port=6328
|
|
> ```
|
|
|
|
A konfigurációs lehetőségek listája a dokumentációban lesznek elérhetőek.
|
|
|
|
## Peer to Peer modell
|
|
|
|
Ahogy már az előbb említettem, a cél egy olyan hálózat kiépítése amiben minden gép csatlakozik az összes többihez.Ennek érdekében szükséges az hogy minden egyes számítógép rendelkezzen egy „hallgató” (listening) socket-el. Ezt a program az indításkor hozza létre.
|
|
|
|

|
|
|
|
> Megjegyzés: a program alapértelmezett portja a `6327`
|
|
|
|
### Csatlakozás más számítógépekhez
|
|
|
|
Ahhoz hogy egy gép csatlakozhasson egy másikhoz először ismernie kell az IP címét (IPv4) és a portot,amin a program fut. Ezt a `peers.txt` nevű fájlban kell meghatározni,a program ezt az indításkor beolvassa soronként, `ipcím:port` formátumban.
|
|
|
|
Miután csatlakoztak a gépek „kezet fognak”,azaz mindkét gép küld magáról egy leírást.A leírás első karakterének kukac karakternek( `@`)kell lennie és tartalmaznia kell egy azonosítót (`id`) és a portot amin a program fut(`port`).Esetlegesen tartalmazhat egy becenevet(`nickname`) is. A különböző paraméterek AND jellel(`&`), a kulcsok és az értékek egyenlőségjellel(`=`) vannak elválasztva
|
|
|
|
> Példa:
|
|
>
|
|
> ```
|
|
> @id=fb55c636c8b513aacab8a46e48109bd2&port=6327&pubkey=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FESFYvdW5RUThuR3pVZUI2WGZUaGxPT3NSTgo3S1ZobDJkWGxaK1pFN2t6RTdDNFQyZjNPRFRsNnpqQVNWK1MwR293aHd5Q2g5cUpNYm1ibERORW12eGRCL08rCkFPYzZFYVhGYmhSUEFjajB1c1hZMlF1a1lCMVlwL1IrdWhhRThWTWlYZXFDRGpoek8zT3RKRnpmQnk5ZTNPSk4KdDdGRzh4bU43a0VvekxWWTd3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQpc&nickname=ToldiBalazs
|
|
> ```
|
|
|
|
A kézfogást mindig az éppen csatlakozó gép kezdi. A fogadó válaszul ugyanilyen formátumban küldi a válaszát,de tartalmazhatja annak peerjeinek listáját(`peers`). Ezek `ipcím:port` formátumban vannak vesszővel(`,`) elválasztva. Ha csatlakozó gép ilyet kap válaszul, akkor ezekre megpróbál csatlakozni.
|
|
|
|
Ha mindez megtörténik akkor mindketten felveszik egymást a peerek listájára.
|
|
|
|
> Megjegyzés: Ha bármelyik fél valamilyen problémát észlel a kézfogás során akkor küldhet hibaüzenetet is.
|
|
>
|
|
> Példa: Ha az egyik fél olyan azonosítót(`id`) küld, ami már létezik a listában,akkor egy ilyen üzenetet küld:
|
|
>
|
|
> ```@valid=false&error=ID_TAKEN```
|
|
|
|
## Felhasználói felület
|
|
|
|
A felhasználó böngészőn keresztül érhető el, a HTTP protokollon alapul. Ehhez szükséges létrehozni egy második hallgató socket-et.
|
|
|
|
> Megjegyzés: a felhasználói felület alapértelmezett portja a `5081`
|
|
|
|
### Felhasználói felület főoldala
|
|
|
|
A felület főoldalán a jelenleg csatlakozott peerek, valamint korábbi beszélgető partnerek listáját találjuk.Ha egyik sincs,akkor ezt a program külön üzenettel jelzi.
|
|
|
|
A felhasználó bármely peer nevére rákattintva elérheti az adott peerel kapcsolatos üzenet oldalát.
|
|
|
|
Ha bármi változás történik ezekkel az adatokkal kapcsolatban,akkor az oldal automatikusan frissül.
|
|
|
|
### Üzenet oldal
|
|
|
|
Itt a felhasználó elolvashatja a korábbi üzeneteit,valamint ha a peer elérhető akkor üzenet is innen küldhető (Valójában nem a böngésző küldi el az üzenetet.Az csak továbbítja a programnak, ami elküldi a címzettnek).
|
|
|