Ground0
2cbfdceaac
Every Include should now have some procedure who are standalone usable. lweb_http Has a lot of changes todo (Full HTTP 1.1 Compliance) lweb_file_cache, is realy buggy. A lot of todo's lweb_IP is Only IsIPStringValid in lweb_helper, there is only some help procedures. To Do: lweb_http_post (Everything Post Specific) lweb_http_get (Everything Get Specific) lweb_http_put (Complete todo nothing done until now) lweb_server_http (Specific http only Server) lweb_server_https (Specific https only Server) lweb_server (Common Server Things) Maybe everything more generic to use standalone...
101 lines
No EOL
3.7 KiB
Text
101 lines
No EOL
3.7 KiB
Text
|
|
;Buggy FileCache Routines ... Wiso auch immer das noch nicht richtig Funktioniert.
|
|
|
|
Procedure FileCacheCleaner(Information.i)
|
|
Protected.i Selected
|
|
Protected.i Counter
|
|
Protected.i MaxSize = Information
|
|
Repeat
|
|
Delay(1000) ;Nur Alle Sekunden Prüfen
|
|
Counter + 1
|
|
LockMutex(file_cache_mutex)
|
|
ResetMap(m_file_cache_map())
|
|
;Debug "FileCacheCleaner" + Str(Counter) + " Map Size:" + Str(MapSize(m_file_cache_map()))
|
|
If NextMapElement(m_file_cache_map())
|
|
Repeat
|
|
m_file_cache(MapKey(m_file_cache_map()))\Timer - 1
|
|
If m_file_cache(MapKey(m_file_cache_map()))\Timer <= 0
|
|
If m_file_cache(MapKey(m_file_cache_map()))\Buffer > 0
|
|
conf_cache_current - m_file_cache(MapKey(m_file_cache_map()))\Size
|
|
FreeMemory(m_file_cache(MapKey(m_file_cache_map()))\Buffer)
|
|
DeleteMapElement(m_file_cache(), MapKey(m_file_cache_map()))
|
|
Debug "Info:["+Str(innercount)+"] Killed:["+MapKey(m_file_cache_map())+"]"
|
|
Selected = DeleteMapElement(m_file_cache_map())
|
|
Else
|
|
Debug "Info:["+Str(innercount)+"] Could Not kill:["+MapKey(m_file_cache_map())+"]"
|
|
EndIf
|
|
Else
|
|
Selected = NextMapElement(m_file_cache_map())
|
|
EndIf
|
|
Until Selected = 0
|
|
EndIf
|
|
|
|
UnlockMutex(file_cache_mutex)
|
|
|
|
|
|
ForEver
|
|
|
|
EndProcedure
|
|
|
|
Procedure FileCache(Information.i)
|
|
;http://purearea.net/pb/english/manual/reference/ug_memory.html
|
|
Protected FileCacheCleanerThread.i
|
|
Protected Tempbuffer.i, MaxSize.i, Current.i
|
|
MaxSize = conf_cache_maxsize * 1024 * 1024
|
|
FileCacheCleanerThread = CreateThread(@FileCacheCleaner(), MaxSize)
|
|
|
|
Repeat
|
|
WaitSemaphore(file_cache_semaphore)
|
|
Debug "Adresse:"+m_file_cache()\Buffer
|
|
If (m_file_cache()\Size + conf_cache_current) <= MaxSize
|
|
conf_cache_current + m_file_cache()\Size
|
|
Tempbuffer = AllocateMemory(m_file_cache()\Size)
|
|
CopyMemory(m_file_cache()\Buffer, Tempbuffer, MemorySize(m_file_cache()\Buffer))
|
|
m_file_cache()\Buffer = Tempbuffer
|
|
m_file_cache()\Timer = conf_cache_time
|
|
m_file_cache()\Is = #True
|
|
m_file_cache_map(MapKey(m_file_cache())) = #True
|
|
SignalSemaphore(file_cache_semaphore_thread)
|
|
Else
|
|
Debug "Cache Full"
|
|
SignalSemaphore(file_cache_semaphore_thread)
|
|
EndIf
|
|
|
|
ForEver
|
|
EndProcedure
|
|
|
|
Procedure AddFileToCache(MemoryID.i, FileName.s, Size.i)
|
|
LockMutex(file_cache_mutex)
|
|
Debug "Cache MaxSize:"+Str(conf_cache_maxsize*1024*1024)+" Actual Size:"+Str(conf_cache_current)
|
|
m_file_cache(FileName)\Buffer = MemoryID
|
|
m_file_cache(FileName)\Size = Size
|
|
SignalSemaphore(file_cache_semaphore)
|
|
WaitSemaphore(file_cache_semaphore_thread)
|
|
If m_file_cache(FileName)\Is
|
|
Debug FileName+" Size:"+Str(m_file_cache(FileName)\Size)+" Timer:"+Str(m_file_cache(FileName)\Timer)+ " new Memory ID:"+Str(m_file_cache(FileName)\Buffer)
|
|
Else
|
|
Debug "File not in cache was to full:"+FileName+ " MaxSize:"+Str(conf_cache_maxsize)+" Actual Size:"+Str(conf_cache_current/1024/1024)
|
|
EndIf
|
|
|
|
UnlockMutex(file_cache_mutex)
|
|
EndProcedure
|
|
|
|
Procedure.s GetFileFromCache(FileName.s, MemoryID.i)
|
|
Protected String.s
|
|
|
|
If TryLockMutex(file_cache_mutex)
|
|
If m_file_cache(FileName)\Is
|
|
MemoryID = ReAllocateMemory(MemoryID, m_file_cache(FileName)\Size)
|
|
CopyMemory(m_file_cache(FileName)\Buffer, MemoryID, m_file_cache(FileName)\Size)
|
|
String.s = Str(m_file_cache(FileName)\Size) + ":" + Str(MemoryID)
|
|
Else
|
|
String.s = #error_string
|
|
EndIf
|
|
UnlockMutex(file_cache_mutex)
|
|
Debug "Get from cache: "+FileName+">"+String+"-------------------------------------------------------------<"
|
|
ProcedureReturn String.s
|
|
Else
|
|
ProcedureReturn #error_string
|
|
EndIf
|
|
|
|
EndProcedure |