Radim chat program pa sam logiku zajedničku klijentu i serveru sam smestio u apstraktnu klasu Protokol a razlike sam odradio u potklasama. Jedna potklasa koristi metod uspostaviVezu(Socket) iz nadklase, a druga ga redefiniše, ali opet postoji poziv metode nadklase sa super.uspostaviVezu(..).
Problem je u blokiranju. Pošto se istovremeno izvršava metoda Protokol.uspostaviVezu dolazi do blokade u delu koda gde se od istog soketa uzmaju InputStream i OutputStream i obmotavaju u Object tokove.
Probao sam da razdvojim zajedničku klasu Protokol u 2 i samo sam obrnuo redosled stvaranja tokova (u jednoj Input pa Output u drugoj obratno) i sve radi. Ali mi to deluje nakalemljeno. Da li postoji neko elegantnije rešenje ili mora biti drugačiji redosled? Uvek mogu primeniti ideju da ono što je različito enkapsuliram, ali bih ipak voleo da mi nadklasa bude identična i za klijenta i da servera. Da li je to uopšte moguće?
Problem je u blokiranju. Pošto se istovremeno izvršava metoda Protokol.uspostaviVezu dolazi do blokade u delu koda gde se od istog soketa uzmaju InputStream i OutputStream i obmotavaju u Object tokove.
Probao sam da razdvojim zajedničku klasu Protokol u 2 i samo sam obrnuo redosled stvaranja tokova (u jednoj Input pa Output u drugoj obratno) i sve radi. Ali mi to deluje nakalemljeno. Da li postoji neko elegantnije rešenje ili mora biti drugačiji redosled? Uvek mogu primeniti ideju da ono što je različito enkapsuliram, ali bih ipak voleo da mi nadklasa bude identična i za klijenta i da servera. Da li je to uopšte moguće?
Potpis
Bolje džaba ležat nego džaba radit.