Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[ Win/Linux ][ Netzwerk ] EGNP_V1 - Die Tochter von TSNEPlay

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  

Wie findet Ihr dieses Projekt?
Super
100%
 100%  [ 4 ]
Gut
0%
 0%  [ 0 ]
Mittelmässig
0%
 0%  [ 0 ]
Schlecht (Warum?)
0%
 0%  [ 0 ]
Scheiße (Warum?)
0%
 0%  [ 0 ]
Stimmen insgesamt : 4

Autor Nachricht
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 24.01.2014, 00:57    Titel: [ Win/Linux ][ Netzwerk ] EGNP_V1 - Die Tochter von TSNEPlay Antworten mit Zitat


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 ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 27.03.2014, 16:44    Titel: Antworten mit Zitat

gibt es eigentlich die Möglichkeit in Egnp bzw tsne direkt ganze udts zu ersenden?

mfg,
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 27.03.2014, 16:46    Titel: Antworten mit Zitat

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 ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 27.03.2014, 17:33    Titel: Antworten mit Zitat

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, 17:39, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 27.03.2014, 17:37    Titel: Antworten mit Zitat

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 ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]


Zuletzt bearbeitet von ThePuppetMaster am 27.03.2014, 17:51, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 27.03.2014, 17:50    Titel: Antworten mit Zitat

Du benutzt einen ähnlichen Ansatz, sieht aber doch schöner aus
Nochmals danke

mfg zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 27.03.2014, 23:02    Titel: Antworten mit Zitat

und, sollte eventuell auch schneller sein, weil du stringoperationen nutzt (z.B. "Chr()").


MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.01.2016, 15:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.01.2016, 09:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4189
Wohnort: ~/

BeitragVerfasst am: 24.01.2016, 11:06    Titel: Antworten mit Zitat

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.
_________________
Meine Großeltern waren als junge Menschen sehr modern - sie hatten schon damals in der Badewanne Email.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.01.2016, 13:08    Titel: Antworten mit Zitat

Ü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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4189
Wohnort: ~/

BeitragVerfasst am: 24.01.2016, 14:25    Titel: Antworten mit Zitat

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
_________________
Meine Großeltern waren als junge Menschen sehr modern - sie hatten schon damals in der Badewanne Email.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.01.2016, 14:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4189
Wohnort: ~/

BeitragVerfasst am: 24.01.2016, 14:50    Titel: Antworten mit Zitat

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.
_________________
Meine Großeltern waren als junge Menschen sehr modern - sie hatten schon damals in der Badewanne Email.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 24.01.2016, 15:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 24.01.2016, 21:07    Titel: Antworten mit Zitat

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 ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 25.01.2016, 07:45    Titel: Antworten mit Zitat

Danke, das Ganze funktioniert jetzt gut. lächeln
Hier TPMs "EGNP_Server_SendData" für die EGNP.bi :
https://www.freebasic-portal.de/porticula/egnpserversenddata-1818.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz