Gå til innhold

Hjelp med nettverksprogram


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...