Seite 1 von 2

SpiderBite: Code auf dem WebServer ausführen

Verfasst: 23.07.2017 15:31
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.

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 23.07.2017 15:36
von RSBasic
Deine Idee ist super. :allright:
Dein Programm werde ich mir merken und es irgendwann ausprobieren, sobald ich SpiderBasic teste und benutze.

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 23.07.2017 16:56
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.

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 25.07.2017 14:36
von dige
Danke Peter, dass ist ja quasi der Ritterschlag für SpiderBasic :allright:

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 25.07.2017 15:19
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

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 12.08.2017 18:32
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

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 25.10.2017 16:36
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?

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 25.10.2017 18:42
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

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 26.10.2017 08:46
von dige
Läuft! Besten Dank :-)

Re: SpiderBite: Code auf dem WebServer ausführen

Verfasst: 13.12.2017 11:28
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.