Milktea Skrevet 22. mars 2011 Del Skrevet 22. mars 2011 Eksprimenterer litt med nettverk og CLI for første gang, og har et par spørsmål. Beklager hvis dette blir grumsete, men jeg har litt problemer med å formulere meg. Jeg ser litt på mulighetene for å lage et interaktivt nettverksspill, litt i samme gate som et MMO. Det jeg egentlig vil er at programmet skal kunne kommunisere med serveren samtidig som det kan ta input fra brukeren. Problemet mitt er da hvordan jeg skal kunne vente på pakker fra socket samtidig som jeg venter på tekst-input. Prøver å skissere det jeg har prøvd meg på her: class Test { ... public function OnInput($input) { do_something(); } ... public function checkInputChanged() { $tmp = $this->fgets_stdin(); // sjekk stdin for CLI input if($tmp !== false) { $this->OnInput($tmp); // kjør input-data } ... } ... main() { while(true) { ... // ta nettverks-input $this->netRecv(); ... // behandle input etc. ... // ut i fra tilstandene sender vi evt. litt tilbake if(condition) { $this->netSend(); } ... // sjekk om vi har input fra brukeren $this->checkInputChanged(); } } ... } Problemene med denne koden er følgende: det ikke er meningen at klienten kjører rutinen "netrecv" -> "netsend" -> "parse input" (og evt. netsend igjen) hele tiden. Slik koden er nå vil klienten være "fryst" for hver iterasjon frem til serveren tar kontakt. Det jeg håper på er å lage en klient som er i stand til å reagere dersom serveren har noe å si, etter visse tidsintervaller kommuniserer med serveren og hører at alt står bra til, men ellers er i stand til å vente på at brukeren gir input før den ber serveren om noe. Noen som har noen tips? Et spørsmål til: har prøvd å få litt farger på tekst-output i kommandolinjen og leste meg opp på ASCII character sequences. I følge eksempelene skal f. eks. dette gi ut rød tekst: echo chr(27) . "[31m Tekst i farger!" . chr(27) . "[0m"; Dessverre får jeg det ikke til å virke, CMD spytter bare ut "←" for ASCII 27. Er altså Windows det er snakk om. Takker for alle svar! Lenke til kommentar
Nickless Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 Eksprimenterer litt med nettverk og CLI for første gang, og har et par spørsmål. Beklager hvis dette blir grumsete, men jeg har litt problemer med å formulere meg. Jeg ser litt på mulighetene for å lage et interaktivt nettverksspill, litt i samme gate som et MMO. Det jeg egentlig vil er at programmet skal kunne kommunisere med serveren samtidig som det kan ta input fra brukeren. Problemet mitt er da hvordan jeg skal kunne vente på pakker fra socket samtidig som jeg venter på tekst-input. Prøver å skissere det jeg har prøvd meg på her: class Test { ... public function OnInput($input) { do_something(); } ... public function checkInputChanged() { $tmp = $this->fgets_stdin(); // sjekk stdin for CLI input if($tmp !== false) { $this->OnInput($tmp); // kjør input-data } ... } ... main() { while(true) { ... // ta nettverks-input $this->netRecv(); ... // behandle input etc. ... // ut i fra tilstandene sender vi evt. litt tilbake if(condition) { $this->netSend(); } ... // sjekk om vi har input fra brukeren $this->checkInputChanged(); } } ... } Problemene med denne koden er følgende: det ikke er meningen at klienten kjører rutinen "netrecv" -> "netsend" -> "parse input" (og evt. netsend igjen) hele tiden. Slik koden er nå vil klienten være "fryst" for hver iterasjon frem til serveren tar kontakt. Det jeg håper på er å lage en klient som er i stand til å reagere dersom serveren har noe å si, etter visse tidsintervaller kommuniserer med serveren og hører at alt står bra til, men ellers er i stand til å vente på at brukeren gir input før den ber serveren om noe. Noen som har noen tips? Et spørsmål til: har prøvd å få litt farger på tekst-output i kommandolinjen og leste meg opp på ASCII character sequences. I følge eksempelene skal f. eks. dette gi ut rød tekst: echo chr(27) . "[31m Tekst i farger!" . chr(27) . "[0m"; Dessverre får jeg det ikke til å virke, CMD spytter bare ut "←" for ASCII 27. Er altså Windows det er snakk om. Takker for alle svar! Har du forsøkt å se om det finnes noen form for threading? Isåfall vil jeg tro det vil løse problemet ditt Lenke til kommentar
Milktea Skrevet 29. mars 2011 Forfatter Del Skrevet 29. mars 2011 Takk for respons. Prøvde å søke opp threading, men ser ikke ut til at PHP er et spesielt egnet språk til slikt. PECL hadde en eksperimentell pakke, ellers var visst stalltipset å kjøre flere prosesser og lappe sammen en kommunikasjon mellom disse. Blir nok heller å se på mulighetene i Python eller noe annet spennende. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå