Fehler bei Webserver-Beispiel?!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Ich hab das jetzt mal Probiert und irgendwas mache ich falsch da ich anfänger bin weiß ich nicht was :D

Code: Alles auswählen

; ------------------------------------------------------------ 
; 
;       Atomic Web Server in PureBasic by AlphaSND 
; 
;           (c) 2001 - Fantaisie Software 
; 
; ------------------------------------------------------------ 
;  
; 19/05/2005 
; Corrections for PB 3.93 (Hroudtwolf) 
; 
; 25/03/2001 
;   Added path relative feature. It can be started everywhere 
;   Added the window to kill it easely 
; 
; 19/03/2001 
;   Added some new features (clients closed automatically) 
; 
; 17/03/2001 
;   First version. 
; 
;Aufruf über :  IP:Port/Index.html 



If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

DefType.l 

Port = 81 
;BaseDirectory$ = "C:\Meine Projekte\Source\Webserver\" 
DefaultPage$   = "index" 
AtomicTitle$   = "Atomic Web Server v1.0" 

Global EOL$ 

EOL$ = Chr(13)+Chr(10) 

*Buffer = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, 10000) 

If CreateNetworkServer(Port) 
  
  OpenWindow(0, 300, 300, 230, 0, #PB_Window_SystemMenu, "Atomic Web Server (Port "+Str(Port)+")") 
  
  Repeat 
    
    WEvent.l = WindowEvent() 
    SEvent.l = NetworkServerEvent() 
    
    If WEvent = #PB_EventCloseWindow 
      Quit = 1 
    EndIf 
    
    If SEvent 
      
      ClientID.l = NetworkClientID() 
      
      Select SEvent 
        
        Case 1  ; When a new client has been connected... 
          
        Case 4  ; When a client has closed the connection... 
          
        Default 
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000) 
          Gosub ProcessRequest 
          
      EndSelect 
    Else 
      Sleep_(20)  ; Don't stole the whole CPU ! 
    EndIf 
    
  Until Quit = 1 
  
  CloseNetworkServer() 
Else 
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", #MB_ICONERROR) 
EndIf 
  
End 



Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$) 
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length 
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length 
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length 
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length 
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length 
  
  ProcedureReturn *Buffer 
EndProcedure 


ProcessRequest: 

a$ = PeekS(*Buffer) 
  
If Left(a$, 3) = "GET" 
  
  MaxPosition = FindString(a$, Chr(13), 5) 
  Position = FindString(a$, " ", 5) 
  If Position < MaxPosition 
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/' 
    RequestedFile$ = Trim(RequestedFile$) 
  Else 
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent.. 
  EndIf 
  
  ; The following routine transforme all '/' in '\' (Windows format) 
  ; 
  Structure tmp 
    a.b 
  EndStructure 
  
  If RequestedFile$ = "" 
    RequestedFile$ = DefaultPage$ 
  Else 
    *t.tmp = @RequestedFile$ 
    While *t\a <> 0 
      If *t\a = '/' : *t\a = '\' : EndIf 
      *t+1 
    Wend 
  EndIf 
  
  
  
  If(RequestedFile$ = "index")
    html_output.s = "Hallo User!"
    *BufferOffset = BuildRequestHeader(*FileBuffer, Len(html_output), ContentType$) 
  EndIf
  
  ; Test if the file exists, and if not display the error message 
  ;    
  ;If ReadFile(0, BaseDirectory$+RequestedFile$) : CloseFile(0) : Else : RequestedFile$ = "AtomicWebServer_Error.html" : EndIf 
  
  ;If ReadFile(0, BaseDirectory$+RequestedFile$) 
  ;  FileLength = Lof() 
    
   ; Select Right(RequestedFile$,4) 
   ;   Case ".gif" 
   ;     ContentType$ = "image/gif" 
        
   ;   Case ".jpg" 
   ;     ContentType$ = "image/jpeg" 
        
   ;   Case ".txt" 
    ;    ContentType$ = "text/plain" 
        
    ;  Case ".zip" 
    ;    ContentType$ = "application/zip" 
        
    ;  Default 
    ;    ContentType$ = "text/html" 
        
   ; EndSelect 
    
  ;  *FileBuffer   = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, FileLength+200) 
   ; *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$) 
    
   ; ReadData(*BufferOffset, FileLength) 
    
   ; CloseFile(0) 
    
    SendNetworkData(ClientID, html_output, *BufferOffset-*BufferOffset+Len(html_output)) 
    GlobalFree_(*FileBuffer) 
  ;Else 
  ;  MessageRequester(AtomicTitle$, "Error: Can't open the file "+BaseDirectory$+RequestedFile$, #MB_ICONERROR) 
  EndIf 
 

Return  
Hab den grade nomma geupdated
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Wozu brauchst du die temp Struktur? :?
Und warum Sleep_() statt Delay() ? :?:
Und warum nicht allocatememory()? :?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Weil ich versuche den Atomic auf String umzuschreiben und ich noch blutiger anfänger bin darum!

mein jetziger code.... irgendwie eine endlosschleife für den browser zumindest hab ich nur ne leere seite... und der browser lädt sich tot

Code: Alles auswählen

; ------------------------------------------------------------ 
; 
;       Atomic Web Server in PureBasic by AlphaSND 
; 
;           (c) 2001 - Fantaisie Software 
; 
; ------------------------------------------------------------ 
;  
; 19/05/2005 
; Corrections for PB 3.93 (Hroudtwolf) 
; 
; 25/03/2001 
;   Added path relative feature. It can be started everywhere 
;   Added the window to kill it easely 
; 
; 19/03/2001 
;   Added some new features (clients closed automatically) 
; 
; 17/03/2001 
;   First version. 
; 
;Aufruf über :  IP:Port/Index.html 



If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

DefType.l 

Port = 81 
;BaseDirectory$ = "C:\Meine Projekte\Source\Webserver\" 
DefaultPage$   = "index" 
AtomicTitle$   = "Atomic Web Server v1.0" 

Global EOL$ 

EOL$ = Chr(13)+Chr(10) 

*Buffer = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, 10000) 

If CreateNetworkServer(Port) 
  
  OpenWindow(0, 300, 300, 230, 0, #PB_Window_SystemMenu, "Atomic Web Server (Port "+Str(Port)+")") 
  
  Repeat 
    
    WEvent.l = WindowEvent() 
    SEvent.l = NetworkServerEvent() 
    
    If WEvent = #PB_EventCloseWindow 
      Quit = 1 
    EndIf 
    
    If SEvent 
      
      ClientID.l = NetworkClientID() 
      
      Select SEvent 
        
        Case 1  ; When a new client has been connected... 
          
        Case 4  ; When a client has closed the connection... 
          
        Default 
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000) 
          Gosub ProcessRequest 
          
      EndSelect 
    Else 
      Delay(20)  ; Don't stole the whole CPU ! 
    EndIf 
    
  Until Quit = 1 
  
  CloseNetworkServer() 
Else 
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", #MB_ICONERROR) 
EndIf 
  
End 



Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$) 
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length 
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length 
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length 
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length 
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length 
  
  ProcedureReturn *Buffer 
EndProcedure 


ProcessRequest: 

a$ = PeekS(*Buffer) 
  
If Left(a$, 3) = "GET" 
  
  MaxPosition = FindString(a$, Chr(13), 5) 
  Position = FindString(a$, " ", 5) 
  If Position < MaxPosition 
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/' 
    RequestedFile$ = Trim(RequestedFile$) 
  Else 
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent.. 
  EndIf 
  
  ; The following routine transforme all '/' in '\' (Windows format) 
  ; 
  Structure tmp 
    a.b 
  EndStructure 
  
  If RequestedFile$ = "" 
    RequestedFile$ = DefaultPage$ 
  Else 
    *t.tmp = @RequestedFile$ 
    While *t\a <> 0 
      If *t\a = '/' : *t\a = '\' : EndIf 
      *t+1 
    Wend 
  EndIf 
  
  
  
  If(RequestedFile$ = "index")
    html_output.s = "Hallo User!"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
  EndIf
  
  ; Test if the file exists, and if not display the error message 
  ;    
  ;If ReadFile(0, BaseDirectory$+RequestedFile$) : CloseFile(0) : Else : RequestedFile$ = "AtomicWebServer_Error.html" : EndIf 
  
  ;If ReadFile(0, BaseDirectory$+RequestedFile$) 
  ;  FileLength = Lof() 
    
   ; Select Right(RequestedFile$,4) 
   ;   Case ".gif" 
   ;     ContentType$ = "image/gif" 
        
   ;   Case ".jpg" 
   ;     ContentType$ = "image/jpeg" 
        
   ;   Case ".txt" 
    ;    ContentType$ = "text/plain" 
        
    ;  Case ".zip" 
    ;    ContentType$ = "application/zip" 
        
    ;  Default 
    ;    ContentType$ = "text/html" 
        
   ; EndSelect 
    
  ;  *FileBuffer   = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, FileLength+200) 
   ; *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$) 
    
   ; ReadData(*BufferOffset, FileLength) 
    
   ; CloseFile(0) 
    
    SendNetworkData(ClientID, html_output, *BufferOffset-*FileBuffer+StringLength) 
    GlobalFree_(*FileBuffer) 
  ;Else 
  ;  MessageRequester(AtomicTitle$, "Error: Can't open the file "+BaseDirectory$+RequestedFile$, #MB_ICONERROR) 
  EndIf 
 

Return 
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Habs hinbekommen dank vielen fummelns *freu*
hier nomma der komplette source

Code: Alles auswählen

; ------------------------------------------------------------ 
;         Based of Atomic Web Server by AlphaSND 
;             (c) 2001 - Fantaisie Software 
; ------------------------------------------------------------ 

If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

DefType.l 

Port = 81 
;BaseDirectory$ = "C:\Meine Projekte\Source\Webserver\" 
DefaultPage$   = "index" 
AtomicTitle$   = "Atomic Web Server v1.0" 

Global EOL$ 

EOL$ = Chr(13)+Chr(10) 

*Buffer = AllocateMemory(10000) 

If CreateNetworkServer(Port) 
  
  OpenWindow(0, 300, 300, 230, 0, #PB_Window_SystemMenu, "Atomic Web Server (Port "+Str(Port)+")") 
  
  Repeat 
    
    WEvent.l = WindowEvent() 
    SEvent.l = NetworkServerEvent() 
    
    If WEvent = #PB_EventCloseWindow 
      Quit = 1 
    EndIf 
    
    If SEvent 
      
      ClientID.l = NetworkClientID() 
      
      Select SEvent 
        
        Case 1  ; When a new client has been connected... 
          
        Case 4  ; When a client has closed the connection... 
          
        Default 
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000) 
          Gosub ProcessRequest 
          
      EndSelect 
    Else 
      Delay(20)  ; Don't stole the whole CPU ! 
    EndIf 
    
  Until Quit = 1 
  
  CloseNetworkServer() 
Else 
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", #MB_ICONERROR) 
EndIf 
  
End 



Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$) 
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length 
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length 
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length 
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length 
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length 
  
  ProcedureReturn *Buffer 
EndProcedure 


ProcessRequest: 

a$ = PeekS(*Buffer) 
  
If Left(a$, 3) = "GET" 
  
  MaxPosition = FindString(a$, Chr(13), 5) 
  Position = FindString(a$, " ", 5) 
  If Position < MaxPosition 
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/' 
    RequestedFile$ = Trim(RequestedFile$) 
  Else 
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent.. 
  EndIf 

  Structure tmp 
    a.b 
  EndStructure 
  
  If RequestedFile$ = "" 
    RequestedFile$ = DefaultPage$ 
  EndIf 
  
  
  
  If(RequestedFile$ = "index")
    html_output.s = "Hallo User!"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output,StringLength)
  EndIf
    
    SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+StringLength) 
    GlobalFree_(*FileBuffer) 
  EndIf 
 

Return 
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

> ich noch blutiger anfänger bin
Wenn du statt den PB eigenen Funktionen die Windows APIs nutzt, dann bist
du für mich kein Anfänger mehr sondern jemand der einen weiten Bogen um
die Hilfe gemacht hat :lol:.
Bild
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

ich hatte das ja nur vom Atomic kopier und alles schon lange umgeändert.. zumindest jetzt...

ich hab nun ein weiteres problem und zwar hab ich das nun mit meinem MP3-Player verbinden wollen und nun gibt der mir beim Kompellieren einen POLINK Error warum? das hat irgendwas mit der Proccess DataSection zu tun.....
hier mal der source

Code: Alles auswählen

; PureBasic Visual Designer v3.90 build 1361


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Playlist
  #LOAD
  #PLAY
  #PAUSE
  #RESUME
  #STOP
  #QUIT
  #TIME_Total
  #Slash
  #TIME_Current
EndEnumeration

;- Audio Constants
;
Enumeration
  #AUDIO_ID
EndEnumeration
;- BalloonTip Constants
;
Enumeration
  #TOOLTIP_NO_ICON
  #TOOLTIP_INFO_ICON
  #TOOLTIP_WARNING_ICON
  #TOOLTIP_ERROR_ICON
EndEnumeration

;- Procedures
;  
Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure
Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$) 
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length 
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length 
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length 
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length 
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length 
  
  ProcedureReturn *Buffer 
EndProcedure 
; ------------------------------------------------------------ 
;        Webserver Based of Atomic Web Server by AlphaSND 
;             (c) 2001 - Fantaisie Software 
; ------------------------------------------------------------ 

If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the Webserver !", 0) 
EndIf 

DefType.l 

Port = 81 
;BaseDirectory$ = "C:\Meine Projekte\Source\Webserver\" 
DefaultPage$   = "index" 
AtomicTitle$   = "Atomic Web Server v1.0" 

Global EOL$ 

EOL$ = Chr(13)+Chr(10) 

*Buffer = AllocateMemory(10000) 


If OpenWindow(#Window_0, 270, 233, 359, 204, #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered | #PB_Window_MaximizeGadget, "MP3-Player")
  ;AdvancedGadgetEvents(#True) 
  If CreateGadgetList(WindowID())
    ButtonGadget(#LOAD, 0, 180, 60, 25, "Laden")
    BalloonTip(WindowID(), #LOAD, "Musikstück laden", "", #TOOLTIP_NO_ICON)
    ListViewGadget(#Playlist, 0, 0, 360, 165)
    BalloonTip(WindowID(), #Playlist, "PlayList", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#PLAY, 60, 180, 60, 25, "Abspielen")
    BalloonTip(WindowID(), #PLAY, "Musikstück abspielen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#PAUSE, 120, 180, 60, 25, "Anhalten")
    BalloonTip(WindowID(), #PAUSE, "Musikstück anhalten", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#RESUME, 180, 180, 60, 25, "Fortsetzen")
    BalloonTip(WindowID(), #RESUME, "Musikstück fortsetzen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#STOP, 240, 180, 60, 25, "Stop")
    BalloonTip(WindowID(), #STOP, "Musikstück stoppen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#QUIT, 300, 180, 60, 25, "Beenden")
    BalloonTip(WindowID(), #QUIT, "Player Beenden", "", #TOOLTIP_NO_ICON)
    TextGadget(#TIME_Total, 55, 165, 45, 15, "00:00:00")
    BalloonTip(WindowID(), #TIME_Total, "Zeit Total", "", #TOOLTIP_NO_ICON)
    TextGadget(#Slash, 45, 165, 10, 15, "/")
    BalloonTip(WindowID(), #Slash, "Slash ? O.o  :D ;)", "", #TOOLTIP_NO_ICON)
    TextGadget(#TIME_Current, 0, 165, 45, 15, "00:00:00")
    BalloonTip(WindowID(), #TIME_Current, "Verstrichene Zeit", "", #TOOLTIP_NO_ICON)
  EndIf
  
  w = WindowWidth ()
  h = WindowHeight() 
  
  Repeat
    EventID.l = WindowEvent()
    
    If CreateNetworkServer(Port)
    SEvent.l = NetworkServerEvent() 
    
    If SEvent 
      
      ClientID.l = NetworkClientID() 
      
      Select SEvent 
        
        Case 1  ; When a new client has been connected... 
          
        Case 4  ; When a client has closed the connection... 
          
        Default 
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000) 
          Gosub ProcessRequest 
          
      EndSelect 
    Else 
      Delay(20)  ; Don't stole the whole CPU ! 
    EndIf 
  EndIf 
    
    If EventID = #PB_Event_SizeWindow 
      ResizeGadget(#Playlist, 0, 0, WindowWidth(), WindowHeight() - 39) 
      For i=#LOAD To #QUIT 
        ResizeGadget(i, -1, WindowHeight() - 24, -1, -1) 
      Next 
      For i=#TIME_Total To #TIME_Current 
        ResizeGadget(i, -1, WindowHeight() - 39, -1, -1) 
      Next 
    EndIf 
    
    If EventID = #PB_Event_CloseWindow
      Quit.l = 1
    EndIf
    If EventID = #WM_KEYDOWN
      If EventwParam() = #VK_Escape
        Quit.l = 1
      EndIf 
    EndIf
    
    If IsAudioZPlaying(#AUDIO_ID) = #False
      Delay(1)
    EndIf 
    
    If IsAudioZPlaying(#AUDIO_ID)
      SetGadgetText(#TIME_Current, PositionAudioZTime(Current))
      Delay(1)
    EndIf 
    Current.l = GetAudioZState(#AUDIO_ID)
    If Current=Total And Play = 1
      StopAudioZ(#AUDIO_ID)
      FreeAudioZ(#AUDIO_ID)
      If CountGadgetItems(#Playlist)=GetGadgetState(#Playlist)+1
        SetGadgetState(#Playlist,0)
      Else
        SetGadgetState(#Playlist,GetGadgetState(#Playlist)+1)
      EndIf
      OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
      PlayAudioZ(#AUDIO_ID)
      Total.l = GetAudioZLength(#AUDIO_ID)
      SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
      Play.l = 1
    EndIf
    
    If GetGadgetState(#Playlist) = -1
      SetGadgetState(#Playlist,0)
    EndIf
    
    If EventID = #PB_Event_Gadget
      Select EventGadgetID()
        Case #LOAD
          File$ = OpenFileRequester("Lied auswählen", "c:\","MpegLayer3 (*.mp3)|*.mp3",0,#PB_Requester_MultiSelection)
          While File$
            ListID.l = CountGadgetItems(#Playlist)
            If File$ <> ""
              AddGadgetItem(#Playlist,ListID,File$,0)  
            EndIf 
            File$ = NextSelectedFileName()
          Wend 
        Case #QUIT
          Quit.l = 1
        Case #PLAY
          If IsAudioZPlaying(#AUDIO_ID)
            MessageRequester("Fehler","Es wird zuzeit noch ein Lied gespielt.")
          Else 
            OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
            PlayAudioZ(#AUDIO_ID)
            Total.l = GetAudioZLength(#AUDIO_ID)
            SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
          EndIf 
          Play.l = 1
        Case #STOP
          Play.l = 0
          StopAudioZ(#AUDIO_ID)
          FreeAudioZ(#AUDIO_ID)
        Case #RESUME
          Play.l = 1
          ResumeAudioZ(#AUDIO_ID)
        Case #PAUSE
          Play.l = 0
          PauseAudioZ(#AUDIO_ID)
        Case #Playlist
          If #PB_EventType_LeftDoubleClick=EventType()
            RemoveGadgetItem(#Playlist,GetGadgetState(#Playlist))
          EndIf
      EndSelect
    EndIf
  Until Quit=1
  CloseNetworkServer() 
EndIf

ProcessRequest: 

a$ = PeekS(*Buffer) 
  
If Left(a$, 3) = "GET" 
  
  MaxPosition = FindString(a$, Chr(13), 5) 
  Position = FindString(a$, " ", 5) 
  If Position < MaxPosition 
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/' 
    RequestedFile$ = Trim(RequestedFile$) 
  Else 
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent.. 
  EndIf 
  
  Structure tmp 
    a.b 
  EndStructure 
  
  If RequestedFile$ = "" 
    RequestedFile$ = DefaultPage$ 
  EndIf 
  
  If(RequestedFile$ = "index")
    html_output.s = "Hallo User!"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output,StringLength)
  EndIf
  If(RequestedFile$ = "test")
    html_output.s = "Hallo User!<br>Willkommen auf der Testseite!"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output,StringLength)
  EndIf
  
  SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+StringLength) 
  FreeMemory(*FileBuffer) 
EndIf 
Return 
EDIT: Der Fehler war wegen UserLibary irgendwas hat sich da gestochen gehabt... :S ähm
der macht trotzdem ne endlosschleife
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Hab es nun auch geschafft... zwar nicht das intelligenteste aber erstmla ein anfang..

Code: Alles auswählen

; PureBasic Visual Designer v3.90 build 1361


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Playlist
  #LOAD
  #PLAY
  #PAUSE
  #RESUME
  #STOP
  #QUIT
  #TIME_Total
  #Slash
  #TIME_Current
EndEnumeration

;- Audio Constants
;
Enumeration
  #AUDIO_ID
EndEnumeration
;- BalloonTip Constants
;
;Enumeration
 ; #TOOLTIP_NO_ICON
 ; #TOOLTIP_INFO_ICON
 ; #TOOLTIP_WARNING_ICON
 ; #TOOLTIP_ERROR_ICON
;EndEnumeration

;- Procedures
;  
Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure

Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$) 
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length 
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length 
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length 
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length 
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length 
  
  ProcedureReturn *Buffer 
EndProcedure 

If OpenWindow(#Window_0, 270, 233, 359, 204, #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered | #PB_Window_MaximizeGadget, "MP3-Player")
  ;AdvancedGadgetEvents(#True) 
  If CreateGadgetList(WindowID())
    ButtonGadget(#LOAD, 0, 180, 60, 25, "Laden")
    BalloonTip(WindowID(), #LOAD, "Musikstück laden", "", #TOOLTIP_NO_ICON)
    ListViewGadget(#Playlist, 0, 0, 360, 165)
    BalloonTip(WindowID(), #Playlist, "PlayList", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#PLAY, 60, 180, 60, 25, "Abspielen")
    BalloonTip(WindowID(), #PLAY, "Musikstück abspielen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#PAUSE, 120, 180, 60, 25, "Anhalten")
    BalloonTip(WindowID(), #PAUSE, "Musikstück anhalten", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#RESUME, 180, 180, 60, 25, "Fortsetzen")
    BalloonTip(WindowID(), #RESUME, "Musikstück fortsetzen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#STOP, 240, 180, 60, 25, "Stop")
    BalloonTip(WindowID(), #STOP, "Musikstück stoppen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#QUIT, 300, 180, 60, 25, "Beenden")
    BalloonTip(WindowID(), #QUIT, "Player Beenden", "", #TOOLTIP_NO_ICON)
    TextGadget(#TIME_Total, 55, 165, 45, 15, "00:00:00")
    BalloonTip(WindowID(), #TIME_Total, "Zeit Total", "", #TOOLTIP_NO_ICON)
    TextGadget(#Slash, 45, 165, 10, 15, "/")
    BalloonTip(WindowID(), #Slash, "Slash ? O.o  :D ;)", "", #TOOLTIP_NO_ICON)
    TextGadget(#TIME_Current, 0, 165, 45, 15, "00:00:00")
    BalloonTip(WindowID(), #TIME_Current, "Verstrichene Zeit", "", #TOOLTIP_NO_ICON)
  EndIf
  
  w = WindowWidth ()
  h = WindowHeight() 
  
  Repeat
    EventID.l = WindowEvent()
    
  ;- MP3-Player Start
    If EventID = #PB_Event_SizeWindow 
      ResizeGadget(#Playlist, 0, 0, WindowWidth(), WindowHeight() - 39) 
      For i=#LOAD To #QUIT 
        ResizeGadget(i, -1, WindowHeight() - 24, -1, -1) 
      Next 
      For i=#TIME_Total To #TIME_Current 
        ResizeGadget(i, -1, WindowHeight() - 39, -1, -1) 
      Next 
    EndIf 
    
    If EventID = #PB_Event_CloseWindow
      Quit.l = 1
    EndIf
    If EventID = #WM_KEYDOWN
      If EventwParam() = #VK_Escape
        Quit.l = 1
      EndIf 
    EndIf
    
    If IsAudioZPlaying(#AUDIO_ID) = #False
      Delay(1)
    EndIf 
    
    If IsAudioZPlaying(#AUDIO_ID)
      SetGadgetText(#TIME_Current, PositionAudioZTime(Current))
      Delay(1)
    EndIf 
    Current.l = GetAudioZState(#AUDIO_ID)
    If Current=Total And Play = 1
      StopAudioZ(#AUDIO_ID)
      FreeAudioZ(#AUDIO_ID)
      If CountGadgetItems(#Playlist)=GetGadgetState(#Playlist)+1
        SetGadgetState(#Playlist,0)
      Else
        SetGadgetState(#Playlist,GetGadgetState(#Playlist)+1)
      EndIf
      OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
      PlayAudioZ(#AUDIO_ID)
      Total.l = GetAudioZLength(#AUDIO_ID)
      SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
      Play.l = 1
    EndIf
    
    If GetGadgetState(#Playlist) = -1
      SetGadgetState(#Playlist,0)
    EndIf
    
    If EventID = #PB_Event_Gadget
      Select EventGadgetID()
        Case #LOAD
          File$ = OpenFileRequester("Lied auswählen", "c:\","MpegLayer3 (*.mp3)|*.mp3",0,#PB_Requester_MultiSelection)
          While File$
            ListID.l = CountGadgetItems(#Playlist)
            If File$ <> ""
              AddGadgetItem(#Playlist,ListID,File$,0)  
            EndIf 
            File$ = NextSelectedFileName()
          Wend 
        Case #QUIT
          Quit.l = 1
        Case #PLAY
          If IsAudioZPlaying(#AUDIO_ID)
            MessageRequester("Fehler","Es wird zuzeit noch ein Lied gespielt.")
          Else 
            OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
            PlayAudioZ(#AUDIO_ID)
            Total.l = GetAudioZLength(#AUDIO_ID)
            SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
          EndIf 
          Play.l = 1
        Case #STOP
          Play.l = 0
          StopAudioZ(#AUDIO_ID)
          FreeAudioZ(#AUDIO_ID)
        Case #RESUME
          Play.l = 1
          ResumeAudioZ(#AUDIO_ID)
        Case #PAUSE
          Play.l = 0
          PauseAudioZ(#AUDIO_ID)
        Case #Playlist
          If #PB_EventType_LeftDoubleClick=EventType()
            RemoveGadgetItem(#Playlist,GetGadgetState(#Playlist))
          EndIf
      EndSelect
    EndIf
    ;- MP3-Player End
  Until Quit=1
EndIf

;- Webserver

; ------------------------------------------------------------ 
;         Based of Atomic Web Server by AlphaSND 
;             (c) 2001 - Fantaisie Software 
; ------------------------------------------------------------ 

If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

DefType.l 

Port = 81 
;BaseDirectory$ = "C:\Meine Projekte\Source\Webserver\" 
DefaultPage$   = "index" 
AtomicTitle$   = "Atomic Web Server v1.0" 

Global EOL$ 

EOL$ = Chr(13)+Chr(10) 

*Buffer = AllocateMemory(10000) 

If CreateNetworkServer(Port) 
  
  Repeat 
    
    WEvent.l = WindowEvent() 
    SEvent.l = NetworkServerEvent() 
    
    If WEvent = #PB_EventCloseWindow 
      Quit = 1 
    EndIf 
    
    If SEvent 
      
      ClientID.l = NetworkClientID() 
      
      Select SEvent 
        
        Case 1  ; When a new client has been connected... 
          
        Case 4  ; When a client has closed the connection... 
          
        Default 
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000) 
          Gosub ProcessRequest 
          
      EndSelect 
    Else 
      Delay(20)  ; Don't stole the whole CPU ! 
    EndIf 
    
  Until Quit = 1 
  
  CloseNetworkServer() 
Else 
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", #MB_ICONERROR) 
EndIf 
 


ProcessRequest: 

a$ = PeekS(*Buffer) 
  
If Left(a$, 3) = "GET" 
  
  MaxPosition = FindString(a$, Chr(13), 5) 
  Position = FindString(a$, " ", 5) 
  If Position < MaxPosition 
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/' 
    RequestedFile$ = Trim(RequestedFile$) 
  Else 
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent.. 
  EndIf 
  
  Structure tmp 
    a.b 
  EndStructure 
  
  If RequestedFile$ = "" 
    RequestedFile$ = DefaultPage$ 
  EndIf 
  
  If(RequestedFile$ = "index")
    html_output.s = "Hallo User!"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output,StringLength)
  EndIf
  If(RequestedFile$ = "test")
    html_output.s = "Hallo User!<br>Willkommen auf der Testseite!"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output,StringLength)
  EndIf
  
  SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+StringLength) 
  FreeMemory(*FileBuffer) 
EndIf 
Return 
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Hab ein Problem..... ich kann nicht auf die Variablen in dern anderen schleife zugreifen.... warum? habse in dem neuen script auch schon auf Global gesetzt geht aber trotzdem nicht...
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

ich ahbe das jetzt nomma versuch ineinander zu würfeln aber jetzt geht der Webserver nichtmehr obwohl der erfolgreich erstellt wurde.... der setzt auch die 1,2 und 4 im Debug voll korrekt aber ausgeben tut der nix.... ich muss da wegen der Reapeat schleife bestimmt ne IF oder so setzen damit der das nur einmal ausgibt und nicht in ner endlosen schleife hängen bleibt..... hier mal der jetzige source:

Code: Alles auswählen

;- -----------------------
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Playlist
  #LOAD
  #PLAY
  #PAUSE
  #RESUME
  #STOP
  #QUIT
  #TIME_Total
  #Slash
  #TIME_Current
EndEnumeration

;- Audio Constants
;
Enumeration
  #AUDIO_ID
EndEnumeration
;- BalloonTip Constants
;
Enumeration
  #TOOLTIP_NO_ICON
  #TOOLTIP_INFO_ICON
  #TOOLTIP_WARNING_ICON
  #TOOLTIP_ERROR_ICON
EndEnumeration

;- Procedures
;  
Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure

Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$) 
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length 
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length 
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length 
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length 
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length 
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length 
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length 
  
  ProcedureReturn *Buffer 
EndProcedure 

If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

DefType.l 

Port = 81 
;BaseDirectory$ = "C:\Meine Projekte\Source\Webserver\" 
DefaultPage$   = "index" 

Global EOL$ 
Global Current.l
Global Total.l
Global Lied.s

EOL$ = Chr(13)+Chr(10) 

*Buffer = AllocateMemory(10000) 
If CreateNetworkServer(Port) 
  MessageRequester("Erfolgreich","Der Server wurde Erfolgreich auf Port: "+Str(Port)+" erstellt.",#PB_MessageRequester_Ok)
Else
  MessageRequester("Fehler","Der Server konnte nicht auf Port: "+Str(Port)+" erstellt werden.",#PB_MessageRequester_Ok)
EndIf 
;- -----------------------
;- MP3-Player
If OpenWindow(#Window_0, 270, 233, 359, 204, #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered | #PB_Window_MaximizeGadget, "MP3-Player")
  ;AdvancedGadgetEvents(#True) 
  If CreateGadgetList(WindowID())
    ButtonGadget(#LOAD, 0, 180, 60, 25, "Laden")
    BalloonTip(WindowID(), #LOAD, "Musikstück laden", "", #TOOLTIP_NO_ICON)
    ListViewGadget(#Playlist, 0, 0, 360, 165)
    BalloonTip(WindowID(), #Playlist, "PlayList", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#PLAY, 60, 180, 60, 25, "Abspielen")
    BalloonTip(WindowID(), #PLAY, "Musikstück abspielen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#PAUSE, 120, 180, 60, 25, "Anhalten")
    BalloonTip(WindowID(), #PAUSE, "Musikstück anhalten", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#RESUME, 180, 180, 60, 25, "Fortsetzen")
    BalloonTip(WindowID(), #RESUME, "Musikstück fortsetzen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#STOP, 240, 180, 60, 25, "Stop")
    BalloonTip(WindowID(), #STOP, "Musikstück stoppen", "", #TOOLTIP_NO_ICON)
    ButtonGadget(#QUIT, 300, 180, 60, 25, "Beenden")
    BalloonTip(WindowID(), #QUIT, "Player Beenden", "", #TOOLTIP_NO_ICON)
    TextGadget(#TIME_Total, 55, 165, 45, 15, "00:00:00")
    BalloonTip(WindowID(), #TIME_Total, "Zeit Total", "", #TOOLTIP_NO_ICON)
    TextGadget(#Slash, 45, 165, 10, 15, "/")
    BalloonTip(WindowID(), #Slash, "Slash ? O.o  :D ;)", "", #TOOLTIP_NO_ICON)
    TextGadget(#TIME_Current, 0, 165, 45, 15, "00:00:00")
    BalloonTip(WindowID(), #TIME_Current, "Verstrichene Zeit", "", #TOOLTIP_NO_ICON)
  EndIf
  
  w = WindowWidth ()
  h = WindowHeight() 
 
  Repeat
    EventID.l = WindowEvent() 
    SEvent.l = NetworkServerEvent() 
    If(SEvent <> 0)
      Debug SEvent
    EndIf 
    If SEvent 
      
      ClientID.l = NetworkClientID() 
      
      Select SEvent 
        
        Case 1  ; When a new client has been connected... 
          
        Case 4  ; When a client has closed the connection... 
          
        Default 
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000) 
          Gosub ProcessRequest 
          
      EndSelect 
    EndIf 
    
    If EventID = #PB_Event_SizeWindow 
      ResizeGadget(#Playlist, 0, 0, WindowWidth(), WindowHeight() - 39) 
      For i=#LOAD To #QUIT 
        ResizeGadget(i, -1, WindowHeight() - 24, -1, -1) 
      Next 
      For i=#TIME_Total To #TIME_Current 
        ResizeGadget(i, -1, WindowHeight() - 39, -1, -1) 
      Next 
    EndIf 
    
    If EventID = #PB_Event_CloseWindow
      Quit.l = 1
    EndIf
    If EventID = #WM_KEYDOWN
      If EventwParam() = #VK_Escape
        Quit.l = 1
      EndIf 
    EndIf
    
    If IsAudioZPlaying(#AUDIO_ID) = #False
      Delay(1)
    EndIf 
    
    If IsAudioZPlaying(#AUDIO_ID)
      SetGadgetText(#TIME_Current, PositionAudioZTime(Current))
      Delay(1)
    EndIf 
    Current = GetAudioZState(#AUDIO_ID)
    If Current=Total And Play = 1
      StopAudioZ(#AUDIO_ID)
      FreeAudioZ(#AUDIO_ID)
      If CountGadgetItems(#Playlist)=GetGadgetState(#Playlist)+1
        SetGadgetState(#Playlist,0)
      Else
        SetGadgetState(#Playlist,GetGadgetState(#Playlist)+1)
      EndIf
      OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
      PlayAudioZ(#AUDIO_ID)
      Total.l = GetAudioZLength(#AUDIO_ID)
      SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
      Play.l = 1
    EndIf
    
    If(Lied <> GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
      Lied = GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0)
    EndIf
  
    If GetGadgetState(#Playlist) = -1
      SetGadgetState(#Playlist,0)
    EndIf
    
    If EventID = #PB_Event_Gadget
      Select EventGadgetID()
        Case #LOAD
          File$ = OpenFileRequester("Lied auswählen", "c:\","MpegLayer3 (*.mp3)|*.mp3",0,#PB_Requester_MultiSelection)
          While File$
            ListID.l = CountGadgetItems(#Playlist)
            If File$ <> ""
              AddGadgetItem(#Playlist,ListID,File$,0)  
            EndIf 
            File$ = NextSelectedFileName()
          Wend 
        Case #QUIT
          Quit.l = 1
        Case #PLAY
          If IsAudioZPlaying(#AUDIO_ID)
            MessageRequester("Fehler","Es wird zuzeit noch ein Lied gespielt.")
          Else 
            OpenAudioZ(#AUDIO_ID,GetGadgetItemText(#Playlist,GetGadgetState(#Playlist),0))
            PlayAudioZ(#AUDIO_ID)
            Total = GetAudioZLength(#AUDIO_ID)
            SetGadgetText(#TIME_Total, PositionAudioZTime(Total))
          EndIf 
          Play.l = 1
        Case #STOP
          Play.l = 0
          StopAudioZ(#AUDIO_ID)
          FreeAudioZ(#AUDIO_ID)
        Case #RESUME
          Play.l = 1
          ResumeAudioZ(#AUDIO_ID)
        Case #PAUSE
          Play.l = 0
          PauseAudioZ(#AUDIO_ID)
        Case #Playlist
          If #PB_EventType_LeftDoubleClick=EventType()
            RemoveGadgetItem(#Playlist,GetGadgetState(#Playlist))
          EndIf
      EndSelect
    EndIf
  Until Quit=1
EndIf
CloseNetworkServer() 
;- -----------------------
;- Webserver

; ------------------------------------------------------------ 
;         Based of Atomic Web Server by AlphaSND 
;             (c) 2001 - Fantaisie Software 
; ------------------------------------------------------------ 

ProcessRequest: 

a$ = PeekS(*Buffer) 
  
If Left(a$, 3) = "GET" 
  
  MaxPosition = FindString(a$, Chr(13), 5) 
  Position = FindString(a$, " ", 5) 
  If Position < MaxPosition 
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/' 
    RequestedFile$ = Trim(RequestedFile$) 
  Else 
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent.. 
  EndIf 
  
  Structure tmp 
    a.b 
  EndStructure 
  
  If RequestedFile$ = "" 
    RequestedFile$ = DefaultPage$ 
  EndIf 
  
  If(RequestedFile$ = "index")
    html_output.s = "Hallo User!"
    
    StringLength.l = Len(html_output$)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output$,StringLength)
  EndIf
  If(RequestedFile$ = "test")
    html_output$ = "Hallo User!<br>Willkommen auf der Testseite!<br>"
    
    StringLength.l = Len(html_output)
    
    *FileBuffer   = AllocateMemory(StringLength+200) 
    *BufferOffset = BuildRequestHeader(*FileBuffer, StringLength, "text/html") 
    PokeS(*BufferOffset,html_output$,StringLength)
    PokeS(*BufferOffset,Lied,Len(Lied))
  EndIf
  
  SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+StringLength) 
  FreeMemory(*FileBuffer) 
EndIf 
Return 
;- -----------------------
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Hat sich geklärt.... Thema kann geschlossen werden..... Ich muss nach den Ganzen schleifenzeig die Procedure Definieren dort war mein fehler... die ganze zeit lang...
Antworten