Du bist nicht angemeldet. [Anmelden]
Optionen
Thema bewerten
Frage bezüglich Server - Client, Client - Server - #3121631 - 18.03.2020, 10:30:57
Love Oltion
Forumuser

Registriert: 02.09.2015
Beiträge: 15
Ich weiß nicht ob ich mit meiner Hilfesuche hier richtig bin, aber ich blicke es überhaupt nicht wie ich ein HTML-UI
synchron, bzw mit synchronem Inhalt bei Unsereingabe, für alle anwesenden laufen lassen kann und beinflussen kann. Die API ist mir da tatsächlich zu unerklärend...

Ich hab die UI soweit fertig...
Script habe ich auch, aber es tut sich genau gar nichts xD
Naja und main.js... da habe ich wahrscheinlich auch nichts richtig was an der mir mangelden Information diesbezüglich in der Doku fehlt...
Klar ich habe schon sendEvent und Client.addEventListener versucht, blablabla, aber was weiß ich xd

Das denke ich mal wichtige in der main.js ist folgendes(?)...
Zitat:

var LFG = new HTMLFile('LFG.html');
var LFGO = AppContent.overlayContent(LFG, 502, 402);
App.onUserJoined = function(user) {
user.sendAppContent(LFGO);
}
App.chatCommands = {
LFG: function (user, param, command) {
parArray = param.split(':');
param1 = parArray[0];
param2 = parArray[1];
user.sendPrivateMessage('In Entwicklung');
if (param.contains(':')) {
if (param == '') {
user.sendPrivateMessage('Trage bitte die Werte _NICK_:_Spiel_ ein.');
} if (param1 == '') {
user.sendPrivateMessage('Gebe bitte voerst deinen eigenen Nickname mit an.');
} if (param2 == '') {
user.sendPrivateMessage('Trage bitte ein in welchem Spiel Du nach Mitspielern suchst.');
} else {
LFGO.sendEvent('Test1', param);
}
} else {
user.sendPrivateMessage('Verwende /LFG bitte korrekt. (_/LFG Nick_:_Spiel_)');
}
},
}

und in der HTML-Datei

<script>
$(document).ready(function() {
Client.addEventListener("Test", function(event) {
var type = event.type;
var data = event.data;
var DataDiv = data.document.createElement("DIV");
DataDiv.innerHTML = "<pre>" + data + "</pre>";
document.getElementById("ContentContainer").appendChild(DataDiv);
});
});
</script>


Danke schonmal, selbst wenn es nur der Hinweis ist dass mein Thread hier falsch ist xD

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121633 - 18.03.2020, 11:00:03
Love Oltion
Forumuser

Registriert: 02.09.2015
Beiträge: 15
Die Frage ist natürlich wie ich das hinbekomme xd

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121640 - 18.03.2020, 13:03:28
crlty
Who?!​

Registriert: 04.12.2015
Beiträge: 498
Hast du dir mal das Entwickler Wiki angeschaut?

https://knuddels-wiki.de/index.php?title=UserApp-Entwicklung

Ich gehe nachher wenn ich zu Hause bin nochmal genau auf deinen App Code ein
_________________________
Liebe Grüße
Jens
[Admin, MyChannel & UserApps]
[Pentester & CyberSec]




[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: crlty] - #3121646 - 18.03.2020, 15:03:29
DdvOiD
​Still lovin

Registriert: 24.02.2005
Beiträge: 791
Ort: Deutschland, NRW, Kempen
Aloha
Anhand des von dir zur Verfügung gestellten Codes (und einer Vermutung meinerseits) tippe ich auf folgendes:
Du nutzt eine Funktion ($(document).ready) welche Jquery (eine javascript Bibliothek) vorraussetzt.
Ich denke jedoch dass du diese Bibliothek garnicht implementiert hast, wodurch der Code am Ende nicht ausgeführt wird.

2 Möglichkeiten (falls ich richtig liege):
1. Jquery einbinden Eine Anleitung und Erklärung findest du hier -> (https://www.javascript-kurs.de/jquery-tutorial.htm)

2. Die .ready Funkton komplett entfernen (unr nur dein Client.addEvent...... Etc. Etc. Nutzen)
_________________________
Ich weiß ich bin ein A-loch... :-D , doch Scheiß egal ob ihr mich liebt... ICH hab mich gern :-]

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121647 - 18.03.2020, 15:07:43
root

Registriert: 19.03.2011
Beiträge: 1.812
Huhu :-)

Vorab: Korrekt aufgehoben sind solche Beiträge im Entwickler-Forum.

Ich habe kurz zwei Beispiele geschrieben, die wie ich glaube etwas Licht ins Dunkel bringen. Sie sind sehr einfach gehalten und dienen lediglich als Ansatz, wie du das Ganze angehen kannst. Mit den Methoden sendEvent() und addEventListener() bist du auch auf der richtigen Spur gewesen. :-)

Warnung! Spoiler!
Code:
Beispiel um Informationen aus dem UI zu empfangen

So könnte es in deinem HTML-Dokument aussehen:
....
<button class="buttons" id="button1">Klick mich</button>
<script>
  document.getElementById('button1').addEventListener('click', function()
  {
    var data = { str: 'dieser String soll übertragen werden' }
    Client.sendEvent('doSomething', data);
  });
</script>

So könnte es in der main.js aussehen:

this.onEventReceived = function(user, key, data)
{
  switch (key) {
	case 'doSomething':
        KnuddelsServer.getDefaultBotUser().sendPublicMessage(data.str);
        break;
   }
}


Warnung! Spoiler!
Code:
Beispiel um Daten an das UI zu senden

So könnte es in deinem HTML-Dokument aussehen:

Client.addEventListener('test', function (meinEvent) 
{
   var text = meinEvent.str;
   document.body.innerText = text;
});

So könnte es in der main.js aussehen:

var data = { str: 'das steht im Dokument' }
for (var i = 0; i <= user.getAppContentSessions().length-1; i++)
{ 
   user.getAppContentSessions()[i].sendEvent('test', data); 
}		


Du musst dir immer vorstellen, dass bei der Übertragung ein Schlüssel übermittelt wird, mit welchem weiter gearbeitet wird. Ist dieser falsch oder nicht vorhanden, kann es natürlich nicht funktionieren. Außerdem rate ich dir, dich mit der Methode sendEvent() zu befassen, denn sie ist auch an Limits gebunden.

Ich hoffe, ich konnte dir weiterhelfen. Solltest du weitere Fragen dazu haben, schick mir ruhig eine /m im Chat. Ich antworte eigentlich immer, auch wenn es manchmal etwas dauert.

Grüße
_________________________
/

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: root] - #3121650 - 18.03.2020, 15:18:49
DdvOiD
​Still lovin

Registriert: 24.02.2005
Beiträge: 791
Ort: Deutschland, NRW, Kempen
Ich sehe gerade noch etwas (kann dann gerne zusammengefasst werden):
Du nutzt sendEvent('Test1, data) - im UI (Client) prüfst du jedoch auf 'Test'
Diese schluesselwerte müssen in beiden fällen identisch sein.
_________________________
Ich weiß ich bin ein A-loch... :-D , doch Scheiß egal ob ihr mich liebt... ICH hab mich gern :-]

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121652 - 18.03.2020, 15:27:24
root

Registriert: 19.03.2011
Beiträge: 1.812
Ich hätte da noch einen kleinen Tipp on top. :-D

Code:
var LFGO = AppContent.overlayContent(LFG, 502, 402);


Grundsätzlich ist das natürlich erlaubt und für eigene Zwecke in Ordnung, solltest du jedoch mal mit fremden Codes arbeiten oder deine anderen zur Verfügung stellen, gibt es Konventionen, die sich eingeschlichen haben. Variablen solltest du im sog. Camel Case schreiben und sie sollten als Bezeichner dienen. Deiner Variable ist nicht zu entnehmen, wofür sie steht, außerdem wurde sie im Upper Case geschrieben, was man eigentlich nur bei Konstanten macht:

Code:
var appContent = AppContent.overlayContent(LFG, 502, 402);
const APPCONTENT = AppContent.overlayContent(LFG, 502, 402);



Bearbeitet von its good (18.03.2020, 15:28:53)
_________________________
/

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121660 - 18.03.2020, 15:51:40
Sephiroth ME
​gods own prototype

Registriert: 24.11.2003
Beiträge: 436
Ort: RLP, DE
Verwende bitte zukünftig code-Blöcke und nicht quote, wenn du Code darstellen möchtest. Das erleichtert die Lesbarkeit ungemein.
Im Code sehe ich jetzt nur einen kleinen Fehler. Bei sendEvent() nutzt du "Test1" bei addEventListener() nur "Test".

Ich empfehle dir, vor dem versenden der Daten auch gegenzuprüfen, ob die Daten deinen Vorgaben entsprechen um keine Daten an andere Nutzer zu senden die ungewollt sind, bzw. nicht den Vorgaben entsprechen.

Da du jQuery nutzt, kannst du auch $("#ContentContainer").append("<div...>") benutzen. https://api.jquery.com/append/

Allerdings solltest du dir eine Funktion erstellen, die den HTML Tags korrekt escaped. Ansonsten kann jeder mit einem <img onerror="function(){}"> Code einschleusen.
Code:
function escapeHTML(string) {
  let p = document.createElement('p');
  p.innerText = string;
  return p.innerHTML;
}


Sodele~
_________________________
Zitat:
Some people would rather die, than think. In fact, they do.
one step closer to world domination

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: root] - #3121669 - 18.03.2020, 17:34:28
Love Oltion
Forumuser

Registriert: 02.09.2015
Beiträge: 15
Es ist eigener Code, daher Variablen wie sie ich sie am liebsten gerne da stehen hätte. Ich kopiere ungern und versuche lieber selbst, auch wenn es mal zu nichts führen kann.

Antwort auf: its good

Ich habe kurz zwei Beispiele geschrieben, die wie ich glaube etwas Licht ins Dunkel bringen. Sie sind sehr einfach gehalten und dienen lediglich als Ansatz, wie du das Ganze angehen kannst. Mit den Methoden sendEvent() und addEventListener() bist du auch auf der richtigen Spur gewesen. :-)

War mir einleuchtend. Allerdings treffe ich hier auf ein ganz komisches Problem, beim Versuch per Chatcommand an die HTML-UI zu senden, bei dem ich in keinem Beitrag was zu finde was mir bei der Lösung hilft ist spezifisch diese Zeile
Code:
user.getAppContentSessions()[i].sendEvent('test', DataParam);

(laut Warnung) welche auslöst dass zu schnell zu viele Events gesendet werden.
In dem Fall war "DataParam = {str: param};"
und der param-Inhalt war nicht mehr als "Love Hai 4:Test"
Warnung! Spoiler!

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 101,76% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 101,76%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 101,36% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 101,36%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 201,10% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 201,10%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 300,90% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 300,90%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 400,74% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 400,74%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 500,58% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 500,58%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 600,44% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 600,44%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 700,28% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 700,28%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 800,14% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 800,14%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: WARN: APP-LIMIT: Would disable App now: App hat zu schnell zu viele Events erzeugt: 901,98% von 50 in 5s: sendAppEvent/Love Hai 4, percent: 901,98%, app: com.knuddels.apps.core.RhinoApp [installKey: knuddelsDEV.30571891.SITZApp@/Gaming@knuddelsDEV] [appVersion: 0] [appName: SITZApp] [channel: /Gaming] [appId: knuddelsDEV.30571891.SITZApp] [olta7: 0,15], onlineUsers: 2
at knuddelsDEV.30571891.SITZApp@v0: main.js:173

App-Logs: SITZApp: ERROR: App hat zu schnell zu viele Events erzeugt: 1.001,60% von 50 in 5s: sendAppEvent/Love Hai 4

^Diese bekam ich beim einmaligen testen

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121674 - 18.03.2020, 18:06:50
root

Registriert: 19.03.2011
Beiträge: 1.812
Diese Zeile war als Beispiel gedacht, wie du es machen kannst. Der Code war nicht dafür gedacht, ihn 1:1 zu übertragen, sondern vielmehr zum Nachvollziehen und an deinen Code anzupassen.

Code:
var data = { str: 'das steht im Dokument' }
var sessions = user.getAppContentSessions();
for (var i = 0; i <= sessions.length-1; i++)
{ 
   sessions[i].sendEvent('test', data); 
}	


1. Du deklarierst die Variable "data" als Objekt, in dem du Daten zum Transport speichern kannst
2. Du deklarierst ein Array mit allen Sessions
3. Du iterierst hier per for-Schleife über die Elemente im Array sessions
4. Jeder Session wird ein Event zugesendet, welches die Parameter 'test' für den Schlüssel und 'data' mit dem Objekt an Daten, die übertragen werden sollen, enthält

Ich weiß allerdings nicht, was du konkret in deinem AppContent darstellen möchest. Ich wurde gerade darauf aufmerksam gemacht, dass du einen statischen AppContent nutzt (habe ich übersehen, war mein Fehler :-D). Dann kannst du die Schleife ad acta legen und einfach dein content.sendEvent(key, data) weiter nutzen. Der einzige Fehler in deinem Code war der hier angesprochene Key.

Du überträgst in LFGO.sendEvent('Test1', param); den Key 'Test1' für ein Event. Dieses fängst du im UI mit Client.addEventListener("Test".... ab, was nicht funktioniert, weil du mit 'Test1' einen anderen Key übermittelst. Wenn du die 1 entfernst, funktioniert es. :-)

Zudem solltest du berücksichtigen, was Sephiroth ME schrieb. innerHTML kann durchaus praktisch sein, ist aber für eine einfache Ausgabe an Daten nicht notwendig und stellt die Möglichkeit zur Verfügung, Code einzuschleusen, da der Code direkt ins Dokument eingebettet wird.


Bearbeitet von its good (18.03.2020, 18:09:41)
_________________________
/

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: root] - #3121684 - 18.03.2020, 19:24:06
Love Oltion
Forumuser

Registriert: 02.09.2015
Beiträge: 15
Ich kopierte es tatsächlich im Nachhinein, weil ich absolut nicht verstehe was ich da falsch mache xdd

Aber selbst bei dem löschen meiner 1 im Key "Test", oder hinzufügen beim Client, ändert sich nichts und es werden keine neuen Div-Container hinzugefügt, obwohl das Script genau das machen soll. Ich gehe daher erstmal davon aus dass genau gar nichts ankommt!? ?-)

Ich bin natürlich absolut kein Programmiersprachenprofi... ernst gemeint... Aber ich blick's nicht xD

[zum Seitenanfang]  
Re: Frage bezüglich Server - Client, Client - Server [Re: Love Oltion] - #3121708 - 18.03.2020, 21:30:10
root

Registriert: 19.03.2011
Beiträge: 1.812
Schreib mir am besten mal im Chat, dann können wir es besser klären. :-)
_________________________
/

[zum Seitenanfang]  


Moderator(en):  Plueschzombie