WebGadget als ChatEdit
Verfasst: 23.03.2007 05:05
Hiho,
Hm also ich will mir aktuell einen kleinen IRC Clienten schreiben um mir besser meine Fansubs zu leechen können.
Naja und da hab ich mir heute Gedanken darüber gemacht wie ich am
besten das Chatfenster mache da ja ein EditorGadget eher unflexibel ist und da kam mir der Gedanke es mit dem WebGadget zu machen.
Allerdings hat dieses ja auch nicht allzu viele Möglichkeiten direkt darauf zu zu greifen und es mit Daten zu füttern und immer meine Daten bei jeder ankommenden Message in
eine Datei zu schreiben diese dann immer im Gadget nachzuladen war mir auch nicht recht
vor allem hätte es Unterumständen dann geflackert und der ständige Zugriff auf die HD
ist ja auch nicht so toll.
Von daher bin ich einen etwas anderen weg gegangen dank Ajax funktioniert das auch echt super.
Ich hab einfach einen kleinen Server erstellt der die Daten immer ans WebGadget weiterreicht
Das WebGadget selbst läd eine kleine HTML Seite mit ein bisl JavaScript welches dann im
Hintergrund alle 100ms die Daten vom Server holt.
Ob das nun besser ist als es direkt immer in eine Datei zuschreiben und diese vom Gadget neu
laden zu lassen sei dahingestell.
Hier mal das test Progie falls jemand Interesse hat. (ohne IRC...)
und hier noch die chat.htm die muß im selben verzeichnis liegen
Die hier funktioniert aber nur unter Windows.[/code]
Hm also ich will mir aktuell einen kleinen IRC Clienten schreiben um mir besser meine Fansubs zu leechen können.

Naja und da hab ich mir heute Gedanken darüber gemacht wie ich am
besten das Chatfenster mache da ja ein EditorGadget eher unflexibel ist und da kam mir der Gedanke es mit dem WebGadget zu machen.
Allerdings hat dieses ja auch nicht allzu viele Möglichkeiten direkt darauf zu zu greifen und es mit Daten zu füttern und immer meine Daten bei jeder ankommenden Message in
eine Datei zu schreiben diese dann immer im Gadget nachzuladen war mir auch nicht recht

vor allem hätte es Unterumständen dann geflackert und der ständige Zugriff auf die HD
ist ja auch nicht so toll.
Von daher bin ich einen etwas anderen weg gegangen dank Ajax funktioniert das auch echt super.
Ich hab einfach einen kleinen Server erstellt der die Daten immer ans WebGadget weiterreicht
Das WebGadget selbst läd eine kleine HTML Seite mit ein bisl JavaScript welches dann im
Hintergrund alle 100ms die Daten vom Server holt.
Ob das nun besser ist als es direkt immer in eine Datei zuschreiben und diese vom Gadget neu
laden zu lassen sei dahingestell.

Hier mal das test Progie falls jemand Interesse hat. (ohne IRC...)
Code: Alles auswählen
InitNetwork()
#Server = 0
Global Client.l
Global EOL$ = Chr(13) + Chr(10)
Global ContentSize.l = 35
Global ContentData$ = ""
Procedure openServer()
Server.l = CreateNetworkServer(#Server, 12345)
If Server = 0
MessageRequester("Fehler", "Netzwerkverbindung konnte nicht geöffnet werden!")
End
EndIf
EndProcedure
Procedure closeServer()
CloseNetworkServer(#Server)
EndProcedure
Procedure sendData()
If ContentData$ <> ""
ContentSize + Len(ContentData$)
EndIf
header$ = "HTTP/1.1 200 OK" + EOL$
header$ + "Server: Chat Test" + EOL$
header$ + "Content-Length: " + Str(ContentSize) + EOL$
header$ + "Content-Language: de" + EOL$
header$ + "Content-Type: text/html" + EOL$
header$ + "Cache-Control: no-cache, must-revalidate" + EOL$
header$ + "Pragma: no-cache" + EOL$
header$ + "Connection: close" + EOL$ + EOL$
header$ + "<?xml version='1.0' ?><ROOT>"
ContentSize = 35
*buffer = AllocateMemory(Len(header$))
PokeS(*buffer, header$ , Len(header$))
SendNetworkData(Client, *buffer, Len(header$))
FreeMemory(*buffer)
If ContentData$ <> ""
*buffer = AllocateMemory(Len(ContentData$))
PokeS(*buffer, ContentData$ , Len(ContentData$))
SendNetworkData(Client, *buffer, Len(ContentData$))
FreeMemory(*buffer)
ContentData$ = ""
EndIf
last$ = "</ROOT>"
*buffer = AllocateMemory(Len(last$))
PokeS(*buffer, last$ , Len(last$))
SendNetworkData(Client, *buffer, Len(last$))
FreeMemory(*buffer)
EndProcedure
openServer()
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Web_0
#Message
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 600, 430, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
WebGadget(#Web_0, 0, 0, 600, 400, GetCurrentDirectory() + "chat.htm")
StringGadget(#Message, 0, 400, 600, 30, "")
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat ; Start of the event loop
If NetworkServerEvent() = #PB_NetworkEvent_Connect
Client = EventClient()
sendData()
EndIf
Event = WindowEvent()
GadgetID = EventGadget()
If Event = #WM_KEYUP
If EventwParam() = #VK_RETURN And GetGadgetText(#Message) <> ""
ContentData$ + "<div>" + ReplaceString(ReplaceString(GetGadgetText(#Message), Chr(60), "<"), Chr(63), ">") + "</div>"
SetGadgetText(#Message, "")
EndIf
EndIf
If Event = #PB_Event_CloseWindow
closeServer()
Break;
EndIf
Delay(1)
ForEver
End
;
Die hier funktioniert aber nur unter Windows.
Code: Alles auswählen
<html>
<head>
<title>Chat Test</title>
<script type="text/Javascript">
<!--
var http = false;
var msg = "";
function sendRequest()
{
http = new ActiveXObject("Microsoft.XMLHTTP");
if(http.overrideMimeType)
{
http.overrideMimeType('text/xml');
}
http.open("GET", "http://127.0.0.1:12345", true);
http.onreadystatechange = handleResponse;
http.send(null);
}
function handleResponse()
{
if(http.readyState == 4)
{
if (http.responseText != "")
{
msg += http.responseText;
scroll(1,9999999999)
}
document.getElementById('messages').innerHTML = msg;
//countdown();
}
}
setInterval("sendRequest()",100);
//-->
</script>
</head><body>
<div id="messages"></div>
</body>