Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Wie findet Ihr dieses Projekt? |
Super |
|
100% |
[ 4 ] |
Gut |
|
0% |
[ 0 ] |
Mittelmässig |
|
0% |
[ 0 ] |
Schlecht (Warum?) |
|
0% |
[ 0 ] |
Scheiße (Warum?) |
|
0% |
[ 0 ] |
|
Stimmen insgesamt : 4 |
|
Autor |
Nachricht |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 24.01.2014, 01:57 Titel: [ Win/Linux ][ Netzwerk ] EGNP_V1 - Die Tochter von TSNEPlay |
|
|
EGNP_V1
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:
EGNP ist ähnlich wie TSNE_Play ein Modul mit dem ein (vorwiegend) Spiel Netzwerk Fähigkeiten erhält.
Im Vergleich zu TSNE_Play ist EGNP deutlich umfangreicher und verfügt über ein Robuste Infrastruktur die frei genutzt werden kann.
Der Programmierer muss sich hierbei nur noch um die Grundlegendsten Dinge kümmern. EGNP nimmt dem Coder einiges an Arbeit ab. Angefangen beim Account Managment bishin zur Benutzerverwaltung.
Eine Kurze Funktionsübersicht:
* Benutzerverwaltung auf der Clientseite (keine Arrays oder LinkedList auf der Coderseite mehr)
* Account-Verwaltung (Einfache Benutzeraccounts können erstellt, gelöscht, bearbeitet,... werden)
* Account-Rechte-Managment (Flags für Admin, Mod, Supermod, Baned, Registered, ...)
* Anonymer Login (Ohne Account-Manager)
* Alle Callbacks liefern einen transparenten, frei zu nutzenden ByREF AnyPtr für eigene Gestaltungsmöglichkeiten, und das für jeden User!
* Public-Server-List (Wenn gewünscht kann sich der Server auf einer Public-List eintragen.)
* Server-Suche (Clienten können via GUI-Interface verfügbare Server suchen und zu diese verbinden)
* Double und Int Datenübertragung
* Message und Data Funktionen
* Verschlüsselte Passwortübertragung und Speicherung (OneWay)
* Server kann Verbindungsaufbau und Datenkommunikation der Clienten überwachen und manipulieren
* Duchgehend Callbackgestützt
* EGNP_Mutexexport
* Asynchrones Senden
* UDP (In Arbeit)
* Highscors (In Vorbereitung)
* Räume (In Vorbereitung)
* ...
EGNP benötigt die neue TSNE_V3.7!
INFO
Um EGNP zu benutzen ist TSNE_V3.7 nötig und muss sich im selben Verzeichnis wie EGNP.bi 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 ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Domso
Anmeldungsdatum: 02.02.2011 Beiträge: 109
|
Verfasst am: 27.03.2014, 17:44 Titel: |
|
|
gibt es eigentlich die Möglichkeit in Egnp bzw tsne direkt ganze udts zu ersenden?
mfg, |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 27.03.2014, 17:46 Titel: |
|
|
Nop. ... das ist leider aufgrund von FB's internem Aufbau nicht möglich.
Du kannst allerdings ein UDT in einen String umwandeln, und diesen übertragen. Auf der anderen Seite musst du entsprechend ein passenden UDT Typen vorhanden halten, diesen allozisieren, und kannst ihn dann zurück "casten".
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Domso
Anmeldungsdatum: 02.02.2011 Beiträge: 109
|
Verfasst am: 27.03.2014, 18:33 Titel: |
|
|
ok, danke für die schnelle hilfe!
Zitat: | Du kannst allerdings ein UDT in einen String umwandeln, und diesen übertragen. Auf der anderen Seite musst du entsprechend ein passenden UDT Typen vorhanden halten, diesen allozisieren, und kannst ihn dann zurück "casten". |
Wie würdest du den udt zu einem string umwandeln?
Mein Code funktioniert zwar, ist aber vermutlich nicht die optimale lösung
Code: | Type test_type
As integer var1
As double var2
As String*10 var3
End Type
Dim As test_type test
Dim As test_type test2
test.var1=1452
test.var2=2.123
test.var3="hallo"
Dim As String tmpOutput
For i As Integer = 0 To SizeOf(test_type)-1
tmpOutput+=chr(Peek(UByte,Cast(UByte Ptr,@test)+i))
Next
Print tmpOutput
For i As Integer = 0 To SizeOf(test_type)-1
Poke (UByte,Cast(UByte Ptr,@test2)+i,tmpOutput[i])
Next
Print test2.var1
Print test2.var2
Print test2.var3
sleep |
Zuletzt bearbeitet von Domso am 27.03.2014, 18:39, insgesamt einmal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 27.03.2014, 18:37 Titel: |
|
|
Code: |
'ACHTUNG! FB.String's im UDT können auf diese weise nicht mit übertragen werden!
'ZStrings hingegen schon.
type myudt
a as integer
b as integer
end type
dim tudt as myudt
dim tstring as string
tstring = space(sizeof(myudt)
for x as integer = 0 to sizeof(myudt) - 1
tstring[x] = cast(UByte Ptr, tudt)[x]
next
'und wieder zurück
for x as integer = 0 to sizeof(myudt) - 1
cast(UByte Ptr, tudt)[x] = tstring[x]
next
|
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Zuletzt bearbeitet von ThePuppetMaster am 27.03.2014, 18:51, insgesamt einmal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Domso
Anmeldungsdatum: 02.02.2011 Beiträge: 109
|
Verfasst am: 27.03.2014, 18:50 Titel: |
|
|
Du benutzt einen ähnlichen Ansatz, sieht aber doch schöner aus
Nochmals danke
mfg ![zwinkern](images/smiles/icon_wink.gif) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 28.03.2014, 00:02 Titel: |
|
|
und, sollte eventuell auch schneller sein, weil du stringoperationen nutzt (z.B. "Chr()").
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Westbeam
![](images/avatars/968972434e2723b3e4dd4.jpg)
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.01.2016, 16:10 Titel: |
|
|
Wie komme ich im Client an den Nickname von anderen Spielern ran?
EDIT: Affemitwaffel hatte mir schon geholfen, holt den Nicknamen von der UserID:
Code: | Function getNickByID (ID As UInteger) As String
Dim t as EGNP_User_Type ptr = EGNP_Client_GetUserTypeByID(Net_Client_ID , ID)
If (t <> 0) Then
Return t->V_Nickname
Else
Return "Unknown"
End If
End Function |
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Westbeam
![](images/avatars/968972434e2723b3e4dd4.jpg)
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.01.2016, 10:19 Titel: |
|
|
Ist es möglich vom Server aus Nachrichten oder Daten zu senden wie mit TSNEPlay ?
Etwa so:
Code: | EGNP_Server_SendMessage(to As Integer, msg As String)
EGNP_Server_SendData(to As Integer, data As String) |
Ich konnte da leider noch nichts finden. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
nemored
![](images/avatars/18585278245ddb8b9d8710.png)
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 24.01.2016, 12:06 Titel: |
|
|
Die Grundfunktionen von TSNE stehen dir weiterhin zur Verfügung:
Code: | Declare Function TSNE_Data_Send (ByRef V_TSNEID as UInteger, ByRef V_Data as String, ByRef R_BytesSend as UInteger = 0, ByVal V_IPA as String = "", ByVal V_Port as UShort = 0, ByVal V_TCPQueSend as Integer = 0) as Integer |
TSNEPlay verwendet ebenfalls die Funktion zum versenden, verpackt nur die Daten zuvor selbständig in den String. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Westbeam
![](images/avatars/968972434e2723b3e4dd4.jpg)
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.01.2016, 14:08 Titel: |
|
|
Über
Code: | TSNE_Data_Send(V_FromUserID,"Datatest") |
erhalte ich leider keine Daten im Client. "V_FromUserID" ist die Client-ID von EGNP. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
nemored
![](images/avatars/18585278245ddb8b9d8710.png)
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 24.01.2016, 15:25 Titel: |
|
|
V_FromUserID sollte vom Namen her die ID des sendenden Partners sein - sicher, dass das die richitge ID ist? Aber versuche mal als ID den Wert 0, das sollte meines Wissens an alle gleichzeitig senden. Für Privatgespräche natürlich etwas unpraktisch. ![lachen](images/smiles/icon_lol.gif) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Westbeam
![](images/avatars/968972434e2723b3e4dd4.jpg)
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.01.2016, 15:31 Titel: |
|
|
Allerdings. Es geht darum, dass der Client über den Chat den Befehl "/help" sendet. Der Server soll dem Client jetzt einen Nachricht zurückschicken:
Code: | Sub EGNP_Server_Message(V_ServerID as UInteger, V_FromUserID as UInteger, V_ToUserID as UInteger, ByRef V_Message as String, V_MessageType as EGNP_MessageType_Enum, ByRef RV_FromMyPtr as Any Ptr, ByRef RV_ToMyPtr as Any Ptr, ByRef R_Cancel as Integer)
Print "EGNP_Server_Message: FromUID:" & Str(V_FromUserID) & " ToUID:" & Str(V_ToUserID) & " Type:" & Str(V_MessageType) & " MSG:>" & V_Message & "<"
If Mid(V_Message,1,1)="/" Then
If Mid(Ucase(V_Message),2)="HELP" Then
TSNE_Data_Send(V_FromUserID,"Datatest")
End If
End If
End Sub |
Wenn ich 0 als ID nehme, erhalte ich auch keine Daten im Client. :/ |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
nemored
![](images/avatars/18585278245ddb8b9d8710.png)
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 24.01.2016, 15:50 Titel: |
|
|
Es kann durchaus sein, dass TSNE eine andere ID-Nummerierung hat als EGNP (TSNE macht das einfach aufsteigend). Was ich so auf die Schnelle gefunden habe: schau mal in die Funktion EGNP_Client_SendMessage rein (EGNP.bi), wie das da gehandhabt wird; vielleicht klappt das ja in ähnlicher Form; vielleicht kannst du aber auch als Server direkt auf diese Funktion zugreifen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Westbeam
![](images/avatars/968972434e2723b3e4dd4.jpg)
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 24.01.2016, 16:43 Titel: |
|
|
Du hat Folgendes geschrieben: | Es kann durchaus sein, dass TSNE eine andere ID-Nummerierung hat als EGNP |
Dann müsste es mit der "0" als ID aber trotzdem klappen. Unter "0" verstehen TSNE und EGNP, dass alle die Daten bekommen.
Du hat Folgendes geschrieben: | vielleicht kannst du aber auch als Server direkt auf diese Funktion zugreifen. |
Das funktioniert leider auch nicht. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 24.01.2016, 22:07 Titel: |
|
|
Du kannst im Server eine art HOOK wie es unter win möglich ist, einrichten.
Hier kannst du auf verschiedene aktionen der clienten prüfen.
Code: | Dim TCallbacks as EGNP_Callback_Type
With TCallbacks
.V_Server_ConnectionRequest = @EGNP_Server_ConnectionRequest
.V_Server_StateUser = @EGNP_Server_StateUser
.V_Server_AccountAction = @EGNP_Server_AccountAction
.V_Server_Message = @EGNP_Server_Message
.V_Server_Data = @EGNP_Server_Data
.V_Server_MoveInt = @EGNP_Server_MoveInt
.V_Server_MoveDbl = @EGNP_Server_MoveDbl
End With
EGNP_Server_SetCallbacks(TServerID, TCallbacks)
|
eine passende routine wäre hier:
Code: | Sub EGNP_Server_Message(V_ServerID as UInteger, V_FromUserID as UInteger, V_ToUserID as UInteger, ByRef V_Message as String, V_MessageType as EGNP_MessageType_Enum, ByRef RV_FromMyPtr as Any Ptr, ByRef RV_ToMyPtr as Any Ptr, ByRef R_Cancel as Integer)
Print "EGNP_Server_Message: FromUID:" & Str(V_FromUserID) & " ToUID:" & Str(V_ToUserID) & " Type:" & Str(V_MessageType) & " MSG:>" & V_Message & "<"
End Sub
|
du kannst hier auswerten, von und für eine nachricht ist, und kannst auch mit einem R_Cancel = 1 das "weiterleiten" abbrechen, bevor sie an die clienten raus geht.
Code: |
Sub EGNP_Server_Message(V_ServerID as UInteger, V_FromUserID as UInteger, V_ToUserID as UInteger, ByRef V_Message as String, V_MessageType as EGNP_MessageType_Enum, ByRef RV_FromMyPtr as Any Ptr, ByRef RV_ToMyPtr as Any Ptr, ByRef R_Cancel as Integer)
if v_message = "/help" then
'tu irgend was
r_cancel = 1
end if
End Sub
|
hier wird auf "/help" geprüft. wenn dem so ist, kannst du etwas tun, und das weiterleiten der nachricht mit dem cancel unterbinden.
Du kannst vom server aus klassische daten senden:
Code: | EGNP_Server_SendData(...) |
Die Daten sind uncodiert, und können etnsprechend frei mit einem protokoll versehen werden.
Wenn du eine klassische Nachricht senden möchtest, die bei den clienten auch als Nachricht ankommen sollen (Message), dann brauchst du eigentlich nur eine neue funktion erzeugen:
EGNP_Server_SendMessage(...)
als Vorlage nimmst du einfach die EGNP_Server_SendData(...) funktion.
Die zu übertragenden Parameter kannst du aus der Clientvariante entnehmen:
EGNP_Client_SendMessage(...)
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Westbeam
![](images/avatars/968972434e2723b3e4dd4.jpg)
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 02.11.2018, 19:05 Titel: |
|
|
25.08.2012
* Public-Server Hostname geändert
Wer den Public-Server-Service nutzt, sollte den Hostname ändern, bzw. ein Update durchführen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|