WebSocketServer externe javaScript Dateien laden?

Alle Fragen zur Netzwerkkommunikation
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

WebSocketServer externe javaScript Dateien laden?

Beitrag von pluto »

Hallo

Ich wollte in Sachen WebSocketServer was "Neues" ausprobieren, womit ich immer meine Probleme habe und zwar möchte ich gerne in einer HTML Datei externe JavaScript Dateien einbinden.

Um WebSocketServer zu nutzen, benutzt ich einfach:
http://code.google.com/p/bauglir-websocket/
diese Lib.

Das Event: OnConnectionSocket
wird zwei mal aufgerufen, aber in beiden Fällen hat der ResourceName nur '/' als Inhalt.

Wenn ich mir jetzt in der Datei "WebSocket2" die Methode "TWebSocketServer.CreateServerConnection" ansehe und mir dort
fncResourceName ausgeben lasse, sehe ich das diese Methode 4 mal aufgerufen wird und zwei mal mit dem richtigen Inhalt.

Warum ist im OnConnectionSocket Event welches ich in der Unit uplWebSocket ist nur '/' drin im Parameter ResourceName.

Ich suche bereits seit Stunden im Internet, nach einer Möglichen Lösung.

Im Anhang findet ihr ein Beispiel Projekt. Welches ich extra Erstellt habe. Ich hoffe ich habe alle Dateien reinkopiert.

Also, mein Ziel ist es Externe Dateien mit dem WebSocketServer zu laden wie z.b. im header angegebene JavaScript Dateien oder CSS Dateien und der gleichen.
Der Hintergrund ist: So könnte ich Fertige JavaScript Lib's einsetzten um die Dastellung der Daten zu verbessern.
Dateianhänge
ForumPrj.zip
(1.66 MiB) 177-mal heruntergeladen
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: WebSocketServer externe javaScript Dateien laden?

Beitrag von pluto »

So wie es aussieht habe ich eine Möglichkeit gefunden, bin mir aber noch nicht 100% sicher:
In der Datei WebSocket2, wird das Event onLoadDefaultSite aufgerufen. Das habe ich hinzugefügt um eine index.html zu laden.
jedoch ohne zu wissen, dass es hier noch andere Anfragen vom WebClient gibt beim laden einer Seite. Diese Stelle habe ich nun als Beispiel so geändert:

Code: Alles auswählen

 
           if assigned(fOnLoadDefaultWebSite) then begin
             if fncResourceName = '/' then begin
               fOnLoadDefaultWebSite(OutputDataString);
                                       ;
               Header:='HTTP/1.0 200 '+#13#10+
                      'Content-type: Text/Html; charset=ISO-8859-1'+#13#10+
                      'Content-length: '+inttostr(Length(OutputDataString))+#13#10+
                      'Connection: close'+#13#10+#13#10;
               aSocket.SendString(Header+OutputDataString);
             end
             else begin
               if fncResourceName = '/scriptA.js' then begin
                 OutputDataString:='function Testa() {'+
                                   'alert("test");'+
                                   '}  Testa();';
 
 
                 Header:='HTTP/1.1 200'+#13#10+
                         'Content-type: text/javascript'+#13#10+
                         'Content-length: '+inttostr(Length(OutputDataString))+#13#10+
                         'Connection: close'+#13#10+#13#10;
                 aSocket.SendString(Header+OutputDataString);
               end;
             end
           end;
 

Ob das nun richtig ist oder nicht, aber es scheint bei Google-Chrome jedenfalls zu klappen. alert wird ausgeführt und eine Fehlermeldung in der Console ist auch verschwunden nur noch das mit dem favoicon.ico ist noch vorhanden. Aber ich bin erst mal ein Schritt weiter gekommen, denke ich.

ich werde das Event ändern, so dass ich das Nachladen von angeforderten resource auslagern kann.
MFG
Michael Springwald

Antworten