Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Wie findet Ihr dieses Projekt? |
Super |
|
70% |
[ 12 ] |
Gut |
|
29% |
[ 5 ] |
Mittelmässig |
|
0% |
[ 0 ] |
Schlecht (Warum?) |
|
0% |
[ 0 ] |
Scheisse (Warum?) |
|
0% |
[ 0 ] |
|
Stimmen insgesamt : 17 |
|
Autor |
Nachricht |
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.08.2009, 15:15 Titel: [ Win/Linux ][ Netzwerk ] TSNEPlay - Netzwerk für Spiele |
|
|
TSNEPlay_V3
BITTE BEACHTEN: TSNEPlay wird nicht weiterentwickelt! Bitte EGNP nutzen!!!
OS: Win / Linux
Kategorie: Netzwerk / Internet / Modul / Spiele
Funktion: TSNE_V3 Erweiterung zur Integration von Netzwerkfähigkeit in Spielen.
Projektseite: Http://freeBASIC-Portal.de
Ausführliche Beschreibung:
TSNEPlay_V3 ist ein Erweiterungsmodul das für die Spileprogrammierun entwickelt wurde.
Es vereinfacht massiv die Integration von Multiplayer Netzwerkverwaltung in Spiele oder Anwendungen jeglicher Art.
Das Modul ist im BETA-Status und damit noch nicht fertig.
Anregungen / Kritik und Lob bitte in das QBasic-Forum posten: (Hier)
Es bietet die Möglichkeit einen Server oder ein Client pro Programm zu erzeugen. Dabei wurde wert darauf gelegt, das die Primären Funktionen sehr einfach strukturiert sind.
INFO
Um TSNEPlay_V3 zu benutzen ist TSNE_V3 nötig und muss sich im selben Verzeichnis wie TSNEPlay_V3 befinden.
Bitte hierzu auch den entsprechenden TSNE_V3 Thread, hier im Forum, beachten http://forum.qbasic.at/viewtopic.php?t=5124
Screenshots:
Keine Bilder vorhanden
Direkt Download:
[Sourcecode] Bitte von der Projektseite herunterladen!
Changelog:
Befindet sich auf der Projektseite. bzw als einzelne Postings.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Zuletzt bearbeitet von ThePuppetMaster am 24.01.2014, 02:00, insgesamt 5-mal bearbeitet |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.08.2009, 15:42 Titel: |
|
|
Klingt interessant, und der Sourcecode sieht - man könnte schon fast sagen "mal wieder" - TPM mäßig einfach nur genial und gut durchdacht aus.
Sehr vielversprechend, mal schauen was da so draus wird |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 28.08.2009, 16:02 Titel: |
|
|
Man muss dazu sagen, von der Idee bis zur Umsetzung hat es keine zwei Tage gedauert, dabei hat er ja noch jede Menge anderer Projekte.
28398 hat es schon gesagt:
Zitat: | einfach nur genial |
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.08.2009, 16:19 Titel: |
|
|
Also ich würde noch nen UDP-Modus bereitstellen, den ganzen TCP-Overhead braucht man ja bei vielen Spielen gar nicht. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.08.2009, 16:35 Titel: |
|
|
Darüber hab ich auch schon nachgedacht ... ich hab mir schon überlegt, das ich einen weiteren kanal hinzufüge, in UDP, neben dem TCP kanal, der dann nur die nutzdaten wie Move, MSG, usw. überträgt ... quasi .. die daten, welche ziemlich oft anfallen.
Meine ersten TCP tests haben aber gezeigt, das TCP scheinbar noch ausreichend is ... ist ja auch die frage, was der coder so basteln will ... ma gugn, wenn ich zeit hab, bau ich noch UDP mit ein.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.08.2009, 16:44 Titel: |
|
|
Machs am besten nicht zu spezifisch.
Also jetzt nicht gleich irgendwie anfangen spezielle Befehle hinzuzufügen. Was ich ganz cool fände, wäre eine Art Eventsystem, wo man eigene Events definieren kann. Die Events werden dann an den Server gesendet, wo dann quasi der Eventhandler vom Server aufgerufen wird. Umgekehrt genauso.
Das wäre echt cool! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 28.08.2009, 16:53 Titel: |
|
|
Sieht so aus, als ob ich das mal irgendwo einsetzen muss. Klingt nämlich sehr interessant. Habe trotzdem mangels Erfahrung in diesem Bereich (noch) nicht abgestimmt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.08.2009, 17:03 Titel: |
|
|
nemored hat Folgendes geschrieben: | Sieht so aus, als ob ich das mal irgendwo einsetzen muss. Klingt nämlich sehr interessant. Habe trotzdem mangels Erfahrung in diesem Bereich (noch) nicht abgestimmt. | Dann i das genau richtig für dich ... mein Ziel war es nämlich, netzwerk stuff so zu verpacken, das es für coder interessant wird, die damit eigentlich noch nie was gemacht haben, oder auch kein bock darauf haben und sich eher auf den Spiele-Teil des Programms konzentrieren (wollen).
Wenn dir was zu kompliziert erscheitn, oder ein problem jeglicher art hast, dann wär ich für feedback dankbar. Dann weis ich nämlich, was ich bei der nächstern Version/Revision ändern muss.
TSNE scheint nämlich für einige immernoch ziemlich kompliziert oder zu viel Aufwand zu sein.
TSNEPlay soll da abhilfe schaffen, und die Netzwerk-souce soweit auslagern, das sich der coder nur noch um die ganze Spielerverwaltung kümmen muss.
Es wären nämlich z.B. keien TSNE-IDs mehr verarbeitet, sondern nur noch PlayerID's (*lach*) .. wohll auch nicht besser, aber vieleicht verständlicher
@28398
Wie meinst du das genau?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 28.08.2009, 17:06 Titel: |
|
|
Beschäftigen werde ich mich auf jeden Fall damit, ist halt alles immer eine Frage der Zeit und der vielen anderen Dinge, die man noch so machen wollte.
Ich melde mich auf jeden Fall. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.08.2009, 17:12 Titel: |
|
|
@TPM:
So ein bisschen wie so eine Art Signal-Slot-System. |
|
Nach oben |
|
|
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 28.08.2009, 17:29 Titel: |
|
|
Das sieht doch alles mal wieder sehr gut aus, gerade weil ich schonmal und irgendwann einmal ein Spiel mit Netzwerkfunktion machen wollte. Ich habe mich zwar noch nie mit TSNE richtig beschäftigt aber das beispielprogramm ist zwar groß aber trotzdem leicht überschaubar. Daher einmal ein Lob für die ganzen kommentare und sinnvollen benennungend er SUBs usw., ich bin da immer am überlegen und meisten kommen irgendwelchen langen dinger raus mit "buchstabencodes" am ende.
Nur bei deinem Beispieweiß ich nicht was dasmit der spieleranzahl sein soll und außerdem würde ich viel mehr daten versenden als nur ein paar koordinaten.
Wo werden hier in der Sub irgendwelche daten verschickt?
Code: | Sub TSNEPlay_Data(ByVal V_FromPlayerID as UInteger, ByVal V_ToPlayerID as UInteger, ByRef V_Data as String)
Print "[DATEN] Von PlayerID:"; V_FromPlayerID; " Fuer PlayerID:"; V_ToPlayerID; " Data: >"; V_Data; "<"
End Sub |
|
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.08.2009, 18:05 Titel: |
|
|
Also .. die oberen Sub's sind keine "versender" sondern "Empfänger" ... sogenannte Callbacks. .. Diese Subs werden aufgerufen, wenn jemand anderes als du (z.B. ein Gegner) etwas tut, das in eine nachrich verpackt und an alle gesand wird. .. nachdem das über dem server zu dir geschickt wurde, läuft diese meldung über eine der oberen Funktion in dein Programm rein, was du anschliessend verarbeiten kannst.
Es gibt aktuell 3 möglichkeiten Daten zu versenden.
1. TSNEPlay_SendMove ... hiermit kann man 3 (X / Y / Z) Double werte versenden, + 1x UInteger
2. TSNEPlay_SendMsg .. ist für den versand von Text-Nachrichten gedacht .. z.B. um eine art chat zu realisieren
3. TSNEPlay_SendData ... ist dafür geeignet um selbst daten in jeder beliebiger form zu versenden. Wenn man z.B. nicht mit der Move oder MSG funktion arbeiten will, udn sich was eigenständiges zusammen basteln möchte.
Das mit der SPieleranzahl ist eine art begrenzung für den Server. Es wird später zwar noch eine möglichkeit hinzugefügt um Spieler vom Server zu kicken, usw. aber diese "Spielerzahl" beim erstellen eines Servers ist eien maximal-beschränkung. Wenn du z.B. nur ein 2 Spieler Spiel oder ein 4 Spieler-Spiel schreibst, kannst du dort fest 4 einstellen
willst du mehrere Spieler zulassen, dannkannst du das bis zu 65535 Spieler erhöhen, was aber massive server-leistung benötigt, vorallem verwaltungsaufwand der clienten, usw. ... es ist einfach eine art kleine max-spieler beschränkung
wenn du keien beschränkung willst, dann gibst einfach das maximum von 65535 ein... (wird aber wohl niemals erreicht)
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.08.2009, 19:16 Titel: |
|
|
Was ich vorhin sagen wollte war inetwa das:
Du kannst im Servercode eigenen "Nachrichtenklassen" definieren. Eine Nachrichtenklasse besteht dann aus dem Namen der Klasse (bspw. "ZugBeendet" - Case insensitive wäre sinnvoll) und beliebigen Daten mit fester Länge.
Beim Verbindungsaufbau sendet der Client dem Server alle ihm bekannten Nachrichtenklassen zu (die Namen + die Payloadsize/Datengröße). Der Server entscheidet dann ob der Client unterstützt wird oder nicht - entweder weil die Payloadsizes sich unterscheiden oder ihm Klassen fehlen.
Man registriert einfach einen Callback für diese Klassen, der dann bei jeder empfangenen Klasse aufgerufen wird. |
|
Nach oben |
|
|
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 21.09.2009, 11:53 Titel: |
|
|
Ist zwar schon ein paar Tage alt, aber ich gebe trotzdem mal meinen Senf dazu, ich bin nämlich gestern erst dazu gekommen den Source runterzuladen
Ich hab mir mal das Beispiel durchgelesen. Es wäre vielleicht sinnvoll, nicht gleich einen Client zu erzeugen wenn man einen Server macht, falls man einen "dedicated server" machen möchte. _________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak |
|
Nach oben |
|
|
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 21.09.2009, 16:41 Titel: |
|
|
Ich vertstehe nicht wie ich eigen Daten senden können soll...
Eigendlich würde ich nur die Funktionen mit eigenen Daten nutzen. |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 21.09.2009, 18:24 Titel: |
|
|
Du kannst (soweit ich mich erinnern kann) auf jeden Fall immer String-Daten verschicken; und damit kannst du deine Daten auf jeden Fall irgendwie übermitteln, im Notfall als String. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 21.09.2009, 21:58 Titel: |
|
|
@nemored
Genau. Wenn dir (frebas) die Move oder MSG funktionen nicht reichen, oder du etwas eigenes basteln möchtest, dann kannst du die DATA funktion nutzen um einen string mit allen möglichen ascii-zeichen zu versenden. Die MSG Funktion ist hierfür nicht geeigent, weil sie intern noch ein bischen mitmischt, und den eigentlich datentrom unnötig erhöht.
Wenn du ein eigenes steuerungskonzept planst, dann baust du dir einfach das auf, was du übertragen willst. Du kannst z.B. eine eigene Move-Funktion bauen, indem du deine koordinaten in einen string packst, dazu noch kommandos, usw. und das ganez über die DATA funktion an den gewünschten Spieler, oder alle Spieler (PlayerID=0) schickst.
Auf der anderen seite bekommst du ein callback gefeuert (DATA natürlich), das genau diese daten enthält. Hierbei musst du dan natürlich die übertragenen daten von hand zerlegen, udn deine koordinaten und kommandos selbst parsen.
die DATA funktion ist für alles möglichegeeigent. quasi eine schnittstelle für eigene dinge.
MOVE und MSG wurden geschaffen, um genau diese arbeit zu erleichten, und den ganzen parseraufwand (und vorallem die datenkompression bei der übertragung) zu erhöhen.
@28398
Joar .. is ne idee, die ich einbauen werden. THX!
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.09.2009, 16:06 Titel: |
|
|
Kann man auch etwas an alle Clienten gleichzeitig schicken? Also so dass nicht allen hintereinander dasselbe geschcikt wird? |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 23.09.2009, 18:04 Titel: |
|
|
Ja ... dafür wird als PlayerID einfach 0 enigetragen. Dadurch wird das automatisch an alle gesand. Wenn die daten jedoch nur an einen bestimten palyer gesand werden soll, dann muss dort die PlayerID des ziel-Clienten eingetragen werden.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 15.03.2010, 17:12 Titel: |
|
|
ich kann TSNEplay_V3.bi nicht compillieren:
Code: | D:\Programme\FreeBASIC\fbc -s console "FbTemp.bas"
D:/Programme/FreeBASIC/inc/TSNE_V3.bi(618) warning 3(1): Passing different pointer types, at parameter 4 of SETSOCKOPT()
FbTemp.bas(639) error 1: Argument count mismatch, found ',' in 'RV = TSNE_Create_Accept(V_RequestID, TNewTSNEID, , @TSNEPlay_INT_Disconnected, @TSNEPlay_INT_Connected, 0)'
FbTemp.bas(644) error 1: Argument count mismatch, found ',' in 'RV = TSNE_Create_Accept(V_RequestID, TNewTSNEID, , @TSNEPlay_INT_Disconnected, @TSNEPlay_INT_Connected, @TSNEPlay_INT_NewData)' |
edit: es hat sich erledigt, ich hatte nicht die aktuelle TSNE_v3.bi ... |
|
Nach oben |
|
|
|