Nemesis' Fund: Socketstream!

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

DivineDominion

Betreff: Nemesis' Fund: Socketstream!

BeitragSa, Jan 01, 2005 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Nemesis fand heute morgen um 1 Uhr das Socketstream-Modul.

Code: [AUSKLAPPEN]

framework brl.basic
Import brl.socketstream
'die ersten beiden zeilen kann man auch weglassen

stream:TSocketStream = TSocketStream.createclient( "divinedominion.art-fx.org", 80 )
stream.WriteLine "GET / HTTP/1.1"
stream.WriteLine "Host: divinedominion.art-fx.org"
stream.WriteLine ""   


While Not Eof( stream )
   x$ = stream.ReadLine( )
   If x$ <> "" Then Print x$
wend


Bis auf die komischen ziffern (2f2, 27, 25, ... )die sporadisch zwischen den Zeilen auftauchen, geht das prima. wir suchen jetzt nach Serverfunktionen Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Dreamora

BeitragSa, Jan 01, 2005 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
stehen alle in der i File drin Smile
einfach die socketstream.i öffnen Wink

Allerdings hat BMax noch keine wirkliche TCP / UDP Implementation ( socketstream dürfte noch nicht crossplattform sein drum net "offiziell" eingebunden oder sowas )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Nemesis

BeitragSa, Jan 01, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja Corssplatform kompatibel dürfte es schon sein. Bei mir (Liunx) und Divine(Win) funzt es ja jedenfalls.
Aber es fehlen noch einige sachen, das stimmt.

DivineDominion

BeitragSa, Jan 01, 2005 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie sieht das denn mit der TSockeTstreamFactory aus? Da gibt's creatE(), aber ich fidne die variablennamen total beschissen, davon abgesehen ist mir die Funktino nicht klar; in der stream.bmx war die Streamfactory glaub ich nur eine verkettete liste
christian.tietze@gmail.com - https://christiantietze.de
macOS

Jolinah

BeitragSa, Jan 01, 2005 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
TCP Verbindungen kann man auch schon über die normalen Streams aufnehmen, allerdings kein Server erstellen.


Code: [AUSKLAPPEN]
OpenStream("tcp::mein.server.de:80")


Was noch sehr intressant ist:

Code: [AUSKLAPPEN]
OpenStream("http::mein.server.de:80")


Das http Protokoll ist also auch schon drin. Wenn man bei beiden Varianten ein GET Request sendet erhält man bei tcp den Header, bei http wird der aber schon geparst, das heisst man bekommt nur noch den Dateiinhalt zurück ohne Header Smile

udp:: sollte auch funktionieren. Aber wie gesagt wärs jetzt noch schön wenn man auch Listener erstellen könnte (Server).
 

Gast

BeitragSa, Jan 01, 2005 17:35
Antworten mit Zitat
Lacht mich nicht aus, aber ich hab mich mit onlinefunktionen innerhalb Blitz oder Blitz Max noch nicht beschäftigt.

Ist es mit den Stream Befehlen, die BMax bislang liefert, möglich eine Onlinehighscore auf einer Website mit Einträgen zu füttern?

Und wenn ja, was brauche ich auf meinem Server? PHP Script? Vielleicht ist jemand so nett und kann mir kurz erklären, wie ich vorgehen kann!?

Danke... .)
 

Nemesis

BeitragSa, Jan 01, 2005 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ist möglich. auf dem Server brauchst du PHP oder iregend einen andere Scriptsprache.
Geht eigentlich genau gleich wie mit den anderen Blitzversionen, musst mal im Forum suchen, da gibts einniges dazu.

Jolinah

BeitragSa, Jan 01, 2005 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Da war einer schneller Wink

Ja das sollte gehen mit der Methode die ich im vorherigen Post geschrieben habe.

Du benötigst PHP. Ein Script das einträge in eine MySQL Datenbank macht. Und evtl. ein anderes welches die Highscore dann ausgibt.

Dazu gabs schon viele Beispiele für Blitzbasic. Das ist hier eigentlich Identisch nur das der Stream anders gehandhabt wird.


So könntest du Name und Score reinschreiben...

Code: [AUSKLAPPEN]
stream:TStream = OpenStream("http::dein.server.de:80")

WriteLine(stream, "GET php_skript.php?Name=" + name + "&Score=" + score + " HTTP/1.1")


So auslesen...

Code: [AUSKLAPPEN]
stream:TStream = OpenStream("http::dein.server.de:80")

WriteLine(stream, "GET php_skript.php HTTP/1.1")

'Nun muss geparst werden, je nachdem was die PHP Datei ausgibt.
line$ = ReadLine(stream)

pos = Instr(line$, "Trennzeichen")
If pos > 0
  name$ = Left(line$, pos)
  score$ = Mid(line$, pos + 1)
Endif



Naja das ganze findest du wenn du im Forum nach IScore suchst. Es ist wirklich nur der Befehl zum öffnen ein bisschen anders.
 

MRaven

BeitragSa, Jan 01, 2005 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Tips Smile

Hab aber jetzt ein kurioses Problem. Habe das iscore Skript von Bruzard installiert und über Blitz3D funktioniert es auch tadellos. Ich brauch es aber für BlitzMax und habe versucht, die ShareScore Funktion von burzard auf BlitzMax zu müntzen. Ich hab aber jetzt folgendes Problem:

Code: [AUSKLAPPEN]
Local is_online:TStream = OpenStream(url$)
   
      Local req$ = script$ + par$
      ' Request an das Serverscript schicken
      WriteLine is_online,"GET /iscore/iscore.php?user=BlitzMax&score=1000 HTTP/1.1"
      WriteLine is_online,"Host: "+url$
      WriteLine is_online,"User-Agent: score"
      WriteLine is_online,"Accept: */*"
      WriteLine is_online,""   
      ' Daten empfangen
      Repeat
         ' Header Ÿberlesen
         trash$ = Trim(ReadLine(is_online))
         DebugLog trash$
      Until Left(trash$, 7) = "[BEGIN]" Or Eof(is_online)


Der Stream wird zwar richtig geöffnet, aber irgendwie scheint der GET Befehl nicht anzukommen, denn wenn ich trash$ auslese, bekomm ich den Quelltext der html Seite ausgegeben, statt die Daten des php Skripts. Ich hab alles mögliche probiert, sowohl unter Windows, als auch unter OSX. Das Skript wird einfach nicht geöffnet, mit dem Blitz3D Code geht es perfekt. Jemand eine Idee???

Auch funktioniert folgendes nicht

Code: [AUSKLAPPEN]
stream:TStream = OpenStream("http::dein.server.de:80")


Den Port 80 als Parameter akzeptiert BMax nicht. Nur wenn ich es weglasse, kann ich den stream öffnen. Könnte daran der Fehler liegen? Und wenn ja, wie kann ich sonst den Port als Parameter übermitteln?

Jolinah

BeitragSa, Jan 01, 2005 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei http funktioniert das mit dem Port offensichtlich nicht.

Wenn du das IScore Script umschreiben willst solltest du das tcp Protokoll verwenden. Da im IScore Script der Header überlesen wird. Oder dann lässt du das mit dem Header überlesen ganz weg und verwendest das http Protokoll ohne Port (geht wohl nur wenn der Webserver auf Port 80 ist).

Also statt http einfach tcp:

Code: [AUSKLAPPEN]
Openstream("tcp::dein.server.de:80")


oder:

Code: [AUSKLAPPEN]
Openstream("http::dein.server.de")


Bei dieser Variante musst du aber die Funktion anpassen, da es jezt keinen Header mehr gibt muss auch nichts überlesen werden.
 

MRaven

BeitragSa, Jan 01, 2005 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Super, DANKE!!!! Das klappt tadellos Smile)

EDIT: Hmpf, zu früh gefreut. Ich kann zwar die Highscores auslesen, aber leider werden neue Highscores nicht in der highscore datei abgespeichert. Sad

Ich werd mal weiter schauen...

EDIT2: Habs jetzt hinbekommen. Danke nochmals für die Hilfe. Portzuweisung funktioniert aber auch über TCP nicht. Klappt aber auch so.

bruZard

BeitragDo, Jan 06, 2005 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleiner Tipp:
Verwende nicht HTTP1.1 sondern HTTP1.0 ... ist wesentlich schneller.

Zudem: Bin gerade dabei ein i.Score Modul für BMX zu basteln, i.ScorePlus release ich heute als Alpha 1 (für Blitzbasic, BlitzPlus und Blitz3D), da ist dann die komplette Highscore Funktionalität wieder enthalten (mit einigen Verbesserungen) und rudimentären Funktionen um UDP Server zu listen und zu finden. Allerdings basiert i.ScorePlus auf MySQL, der Installer dafür ist aber schon fertig, so muss nicht jeder die Tabellen von Hand aufsetzen.

[EDIT]
so funktioniert alles wie es soll:
Code: [AUSKLAPPEN]

Import BRL.SocketStream

Local host:String      = "localhost"
Local script:String   = "iscore/iscore.php"
Local port:Int         = 80

Function iS_Connect(host:String,script:String,port:Int)
   stream:TSocketStream = TSocketStream.CreateClient(host,port)
   stream.WriteLine "GET /"+script+" HTTP/1.0"
   stream.WriteLine "Host: "+host
   stream.WriteLine "User-Agent: i.Score"
   stream.WriteLine "Accept: */*"
   stream.WriteLine ""
   
   While Not Eof(stream)
      in$ = stream.ReadLine()
      in$<>"" Then Print in$
   Wend
End Function

iS_Connect(host,script,port)

WaitKey(); End

Da ich das Teil als Modul compilieren will habe ich natürlich kein Framework definiert.
[/EDIT]
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

bruZard

BeitragDo, Jan 06, 2005 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
@MRaven ... gucke mal unter Projekte -> i.ScorePlus ... da kannst Du die neue i.Score entweder als normalen Source, oder aber als Modul herunterladen ... allerdings benötigts Du für die neue Version eine MySQL Datenbank. Ist aber alles in der readme.txt erklärt.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group