SpiderBite: Code auf dem WebServer ausführen

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

SpiderBite: Code auf dem WebServer ausführen

Beitrag von Kiffi »

SpiderBite

Die aktuellen Sourcen und die Dokumentation befindet sich auf: https://github.com/spiderbytes/SpiderBite

Was ist das hier?

SpiderBite ist ein Präprozessor für SpiderBasic, der es ermöglicht, in einem Code Bereiche zu markieren, die auf dem WebServer ausgeführt werden (der sogenannte ServerCode (PB2Web-User werden es kennen :wink:)).

Wie bekannt ist, kann und darf der von SpiderBasic generierte Code nicht direkt auf die Hardware des WebServers zugreifen. Somit ist es nicht möglich, direkte Datenbankabfragen, Filesystemzugriffe oder sonstiges aus SpiderBasic auszuführen. Die bisherige Vorgehensweise ist es, eine serverseitige Komponente zu programmieren (sei es als CGI oder PHP- (ASP-, Python-, ...) Script) und diese Komponente dann in SpiderBasic mittels HttpRequest() aufzurufen. Das funktioniert eigentlich ganz gut, ist aber meines Erachtens nicht besonders komfortabel. Aus diesem Grund habe ich mich entschlossen, SpiderBite zu entwickeln.

Ein simples Beispiel

Code: Alles auswählen

EnablePbCgi

  ; der Code in diesem Block wird auf dem Server ausgeführt

  ProcedureDLL.s myPbCgiProcedure()
    ProcedureReturn "Hello from myPbCgiProcedure"
  EndProcedure

DisablePbCgi

Debug myPbCgiProcedure()
Der Code, der oben in dem `EnablePbCgi/DisablePbCgi` - Block notiert ist, wird vor dem eigentlichen Konvertierungsvorgang durch SpiderBite extrahiert und in eine eigene PureBasic-Executable kompiliert (eine sogenannte CGI-EXE), die dann auf dem Server ausgeführt wird. Hierbei steht im ServerCode-Block der gesamte PureBasic-Befehlsvorrat zur Verfügung.

Wichtig ist, dass die auszuführende Prozedur als ProcedureDLL() angegeben wird. Somit ist sie clientseitig aufrufbar.

Neben der Möglichkeit, PureBasic-CGI zu erstellen stehen auch Blockbereiche für PHP, ASP und ASPX zur Verfügung. Ein Beispiel für PHP:

Code: Alles auswählen

EnablePHP
  
  ProcedureDLL myPhpProcedure()
    ! return "Hello from myPhpProcedure";
  EndProcedure
  
DisablePHP

Debug myPhpProcedure()
Die PHP-Befehle werden hier durch ein führendes Ausrufezeichen markiert.

Es ist möglich unterschiedliche Blockbereiche in einem Source zu nutzen (hier: PbCgi und PHP):

Code: Alles auswählen

EnablePbCgi
  ProcedureDLL.s myPbCgiProcedure()
    ProcedureReturn "Hello from myPbCgiProcedure"
  EndProcedure
DisablePbCgi

EnablePHP
  ProcedureDLL.s myPhpProcedure()
    ! return "Hello from myPhpProcedure";
  EndProcedure
DisablePHP

Debug myPbCgiProcedure()
Debug myPhpProcedure()
Weitere Informationen entnehmt Ihr bitte der Dokumentation auf: https://github.com/spiderbytes/SpiderBite

Have fun ... Peter

// Edit: Beitrag auf wesentliche Sachen gekürzt. Wer mehr wissen möchte, schaut sich den GitHub-Link an.
// Edit2: Codebeispiele angepasst, da ab der Version vom 01.10.2017 zwischen öffentlichen und privaten Prozeduren unterschieden wird.
Zuletzt geändert von Kiffi am 01.10.2017 17:38, insgesamt 2-mal geändert.
Hygge
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von RSBasic »

Deine Idee ist super. :allright:
Dein Programm werde ich mir merken und es irgendwann ausprobieren, sobald ich SpiderBasic teste und benutze.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von Nino »

Die Verschmelzung von SpiderBasic und PureBasic und PHP und mehr ... genial! :allright:

Ich hoffe, dass ich bald Zeit haben werde mich näher mit diesen Dingen zu beschäftigen.
Benutzeravatar
dige
Beiträge: 1179
Registriert: 08.09.2004 08:53

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von dige »

Danke Peter, dass ist ja quasi der Ritterschlag für SpiderBasic :allright:
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von Kiffi »

Hallo Ihr Drei,

danke für die netten Rückmeldungen! <)

Es ist noch viel zu tun. SpiderBite ist noch nicht so, wie ich es mir vorstelle. Hinzu kommt eine fiese Sache, die eigentlich nur Fred fixen kann.

Aber so, wie ich das sehe, ist die Anzahl der Benutzer momentan sowieso im überschaubaren Bereich. ;-)

Grüße ... Peter
Hygge
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von Kiffi »

Kiffi hat geschrieben:Hinzu kommt eine fiese Sache, die eigentlich nur Fred fixen kann.
das habe ich jetzt mit einem weiteren Tool erst einmal umgehen können. Nicht schön, aber selten. Wer SpiderBite benutzt und SpiderBasic-Apps erstellen möchte, sollte unbedingt das hier lesen: https://github.com/spiderbytes/SpiderBi ... create-app

Nerviger Nebeneffekt: Wenn die entsprechende Option eingeschaltet ist, meldet SpiderBasic nach Erstellen einer App, dass sich der SourceCode geändert hat. Hat er aber nicht. Ist lediglich das Resultat einer Umkopier-Aktion von SpiderBite und SpiderBiteAfterCreateApp.

Grüße ... Peter
Hygge
Benutzeravatar
dige
Beiträge: 1179
Registriert: 08.09.2004 08:53

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von dige »

Hallo Peter,

bei dem folgenden Coding erstellt SpiderBite die Post - Parameter nicht korrekt.
Der Parameter 0 für die Funktionszuweisung bleibt leer.

Code: Alles auswählen

#SpiderBite_Profile = "default"

! $('head').append('<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">');

; IncludeFile "jQuery.sbi"
; 
; UseModule jQuery
;   SetAttribute(Table, "border", "1") ; set the border attribute
;   SetCSS(Table, "left", "100px")
;   SetText(TableCell, "Row " + rowCounter + " / Cell " + cellCounter) ; write some text into the cell
; UnuseModule jQuery

;{ Included Gui.pbf
Enumeration FormWindow
  #hWnd
EndEnumeration

Enumeration FormGadget
  #D_DATE
  #S_TITLE
  #S_AMOUNT
  #T_DATE
  #T_TITLE
  #T_AMOUNT
  #E_DESCR
  #T_DESCR
  #T_CATALOG
  #CB_CATALOG
  #B_SAVE
EndEnumeration


Procedure OpenhWnd(x = 0, y = 0, width = 414, height = 320)
  OpenWindow(#hWnd, x, y, width, height, "Mobil Phone Test with SpiderBasic", #PB_Window_BorderLess)
  DateGadget(#D_DATE, 10, 30, 140, 40, "")
  StringGadget(#S_TITLE, 160, 30, 230, 40, "")
  StringGadget(#S_AMOUNT, 140, 260, 80, 40, "")
  TextGadget(#T_DATE, 10, 10, 100, 20, "Datum")
  TextGadget(#T_TITLE, 160, 10, 100, 20, "Titel")
  TextGadget(#T_AMOUNT, 140, 240, 80, 20, "Betrag EUR")
  EditorGadget(#E_DESCR, 10, 110, 380, 110)
  TextGadget(#T_DESCR, 10, 90, 100, 20, "Beschreibung")
  TextGadget(#T_CATALOG, 10, 240, 100, 20, "Kategorie")
  ComboBoxGadget(#CB_CATALOG, 10, 260, 110, 40, #PB_ComboBox_Editable)
  AddGadgetItem(#CB_CATALOG, -1, "Lebensmittel")
  AddGadgetItem(#CB_CATALOG, -1, "Technik")
  AddGadgetItem(#CB_CATALOG, -1, "Fahrzeug")
  AddGadgetItem(#CB_CATALOG, -1, "Versicherung")
  AddGadgetItem(#CB_CATALOG, -1, "Miete")
  ButtonGadget(#B_SAVE, 240, 240, 150, 60, "Speichern")
EndProcedure
;XIncludeFile "Gui.pbf"
;}

Structure Amount
  dtg.s
  title.s
  descript.s
  catalog.s
  value.s
EndStructure


EnablePbCgi


ProcedureDll.s CGI_SaveAmount (json.s)
  Protected Result.s = "[false]"
  
  If CreateFile(0, "C:\Temp\Json.json")
    WriteStringN(0, json)
    CloseFile(0)
    Result = "[success]"
  EndIf
  
  ProcedureReturn Result
EndProcedure  


DisablePbCgi

Procedure CGI_Proc_Protector()
  
  If 1=2
    
    CGI_SaveAmount ("")
    
  EndIf
  
EndProcedure

CGI_Proc_Protector()

; iPhone ViewPort: 414 px Hochkant Breite


Procedure SaveAmount ()
  Protected A.Amount
  Protected txt.s, JSONID.i
  
  A\dtg       = Str(GetGadgetState(#D_DATE))
  A\title     = GetGadgetText(#S_TITLE)
  A\descript  = GetGadgetText(#E_DESCR)
  A\value     = GetGadgetText(#S_AMOUNT)
  A\catalog   = GetGadgetText(#CB_CATALOG)
  
  A\value = ReplaceString(A\value, ",", ".")
  
  JSONID = CreateJSON(#PB_Any)
  
  If JSONID
    
    InsertJSONStructure(JSONValue(JSONID), @A, Amount)
    txt = ComposeJSON(JSONID)
    Debug txt
    
  EndIf
    
  CGI_SaveAmount(txt)
  
EndProcedure


OpenhWnd ()

BindGadgetEvent (#B_SAVE, @SaveAmount(), #PB_EventType_LeftClick)

Kannst du das bitte mal prüfen?
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von Kiffi »

dige hat geschrieben:Kannst du das bitte mal prüfen?
Geprüft, bestätigt und gefixt.

-> https://github.com/spiderbytes/SpiderBite

Grüße ... Peter
Hygge
Benutzeravatar
dige
Beiträge: 1179
Registriert: 08.09.2004 08:53

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von dige »

Läuft! Besten Dank :-)
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
dige
Beiträge: 1179
Registriert: 08.09.2004 08:53

Re: SpiderBite: Code auf dem WebServer ausführen

Beitrag von dige »

Hallo Peter,

um CGI Code zu sharen, würde ich diesen gern in eine Extra .pbi auslagern und wie folgt ins
SpiderBasic Coding integrieren.
EnablePbCgi
XIncludeFile "CGI.pbi"
DisablePbCgi
Wenn aber innerhalb der CGI.pbi weitere Includes enthält, wird das nicht korrekt aufgelöst.
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Antworten