mein Problem ist derzeit, dass ich beim programmieren eines Chat-Clients Probleme mit dem eigentlichen Chat-Fenster und dem Nachrichten emfang habe.
1. Problem: Beim schließen vom "Chat-Fenster", schließt auch das "Haupt-Fenster" wo die Liste der Chatpatner enthalten ist. Trotz das jedes Fenster mit #PB_Any geöffnet wird.
2. Problem: Nachrichtenemfang von mehreren Nachrichten auf verschiedenen "Chat-Fenster"'n gleichzeitig. Da bei jedem Kontakt ein eigenes "Chat-Fenster" geöffnet wird und dies in einem Theard, weiß ich nicht genau wie ich einen "zentralen" Emfang einrichten kann und wie ich die Nachrichten in das entsprechende Fenster bekomme. Senden ist schließlich kein Problem, da dies jedes Fenster einzell machen kann. Aber es müssen alle Nachrichten vom Server emfangen werden, da mehrere gleichzeitig auf abgeschicken nachrichten antworten könnten. Zudem müssen sowieso steuerungssignal emfangen werden.
3. Problem: Wenn in einem Nachrichten- ("Chat-Fenster") eine neue Nachricht eingegangen ist sieht man diese nicht, wenn das Fenster nicht geöffnet ist. Wie bringe ich das Fenster bzw. Windows dazu es in der Taskleiste (bzw. Programmleiste) blicken zu lassen?
Code: Alles auswählen
Procedure PvtMessSend(Para$)
ConnID = Val(StringField(Para$, 1, "/"))
RUID$ = StringField(Para$, 2, "/")
ENC$ = StringField(Para$, 3, "/")
AESKey$= StringField(Para$, 4, "/")
Debug "CLT PvtMessSend :: ConnID: "+Str(ConnID)
Debug "CLT PvtMessSend :: RUID$: "+RUID$
Debug "CLT PvtMessSend :: ENC$: "+ENC$
Debug "CLT PvtMessSend :: AESKey$: "+AESKey$
pri = OpenWindow(#PB_Any, 0, 0, 550, 300, clientname$+" Privat ("+RUID$+")", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If pri
EditorGadget ( 1, 5, 5, 540, 170, #PB_Editor_ReadOnly)
Frame3DGadget ( 2, 5, 175, 540, 30, "")
CheckBoxGadget ( 3, 10, 183, 220, 20, "Mit ENTER eine Nachricht abschicken."): SetGadgetState(3, #PB_Checkbox_Checked)
CheckBoxGadget ( 4, 240, 183, 150, 20, "Fenster beim Emfang öffnen."): SetGadgetState(4, #PB_Checkbox_Checked)
EditorGadget ( 5, 5, 210, 450, 80)
ButtonGadget ( 10, 460, 210, 85, 25, "Senden")
ButtonGadget ( 12, 460, 275, 85, 15, "Encode")
SetGadgetColor ( 1, #PB_Gadget_BackColor, RGB(00, 11, 15))
SetGadgetColor ( 1, #PB_Gadget_FrontColor, RGB(255, 255, 255))
SendMessage_(GadgetID(1),#EM_SETTARGETDEVICE,#Null,#False)
SetGadgetColor ( 5, #PB_Gadget_BackColor, RGB(00, 11, 15))
SetGadgetColor ( 5, #PB_Gadget_FrontColor, RGB(255, 255, 255))
SendMessage_(GadgetID(5),#EM_SETTARGETDEVICE,#Null,#False)
AddKeyboardShortcut(pri, #PB_Shortcut_Return, 110)
*eBuffer = AllocateMemory(2401)
bef$ = "#NULL"
Repeat
Event = WindowEvent()
NetEvent = NetworkClientEvent(ConnID)
; If GetActiveWindow() <> pri And blk = 2
; blk = 0
; WinBlink(pri, "", 0)
; EndIf
If NetEvent
Select NetEvent
Case 2
ReceiveNetworkData(ConnID, *eBuffer, 2401)
emfTEMP$ = PeekS(*eBuffer, -1, #PB_Ascii)
incTemp$ = Mid(emfTEMP$, 4, Len(emfTEMP$)-3)
If StringField(emfTEMP$, 1, Chr(HEADStart)) = "MES"
HEADER$ = StringField(StringField(incTemp$,2,Chr(HEADStart)),1,Chr(HEADEnde))
Text.s = StringField(StringField(incTemp$,2,Chr(TEXTStart)),1,Chr(TEXTEnde))
CtrlNmb = Val(StringField(StringField(StringField(HEADER$,1,Chr(BLOCKStart)), 2,Chr(HEADStart)), 1, "/"))
GroupNmb = Val(StringField(StringField(StringField(HEADER$,1,Chr(BLOCKStart)), 2,Chr(HEADStart)), 2, "/"))
MDCE$ = StringField(StringField(HEADER$,2,Chr(BLOCKStart)),1,Chr(BLOCKEnde))
SUID$ = StringField(StringField(incTEMP$, 2, Chr(HEADEnde)), 1, Chr(TEXTStart))
Editor_Color( 1, RGB(255, 255, 255))
AddGadgetItem( 1, -1, SUID$+" ("+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", Date())+"):")
Editor_Color( 1, RGB(200, 200, 200))
AddGadgetItem( 1, -1, Text.s)
SendMessage_(GadgetID(1),#EM_SCROLL,#SB_BOTTOM,0)
; If GetActiveWindow() <> pri
; WinBlink(pri, "F", 0)
; blk = 2
; EndIf
EndIf
Case 3 ;File
EndSelect
EndIf
Delay(5)
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case 110
Event = #PB_Event_Gadget
gd = 1
egid = 10
EndSelect
Case #PB_Event_Gadget
If gd <> 1
egid = EventGadget()
Else
egid = 10
gd = 0
EndIf
Select egid
Case 10
If GetGadgetText(5) <> ""
SendMESS(ConnID, GetGadgetText(5), RUID$)
Else
Editor_Color( 1, RGB(255, 255, 255))
AddGadgetItem( 1, -1, "Client ("+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", Date())+"):")
;SetGadgetItemColor(1, -1, #PB_Gadget_FrontColor, RGB(255, 255, 255))
Editor_Color( 1, RGB(100, 100, 100))
AddGadgetItem( 1, -1, "Du kannst keine leeren Nachrichten verschicken!")
SendMessage_(GadgetID(1),#EM_SCROLL,#SB_BOTTOM,0)
;SetGadgetItemColor(1, -1, #PB_Gadget_FrontColor, RGB(100, 100, 100))
EndIf
ClearGadgetItems(5)
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Bernd ; )