Edit Box neue Zeile

  • Huhu
    Habe meinen Chat mitlerweile soweit das die Namen angezeigt werden von den Leuten die drin sind. Nun hab ich aber das Problem das ich rechts eine Editbox habe und den namen mit GuiCtrlSetData Updaten lasse.
    Beim 1. Clienten alles ok
    Ab dem 2. Überschreibt der dann den 1.
    Wie krieg ich das hin das der den 1. Namen da lässt und in eine neue Zeile schreibt?

    Grüße

  • Funktioniert von der Sache her schon aber das Problem is das er mir jetzt bei jedem Nachrichtenabsenden den Usernamen hinterschreibt
    hab des so gemacht das der den da aktualisiern soll halt wenn die nachricht abgeschickt wurd^^
    hat jemand noch ne andere lösung parat?^^


  • Nun schreibt er den neuen Namen einfach dahinter?!


    Wenn der Cursor am Ende des Textes ist, dann ja, ansonsten wird er eingefügt. Also evtl. sicherstellen, daß der Cursor sich am Ende des Textes befindet.

    Edit, Input: wenn ein Parameter angegeben wird und dieser nicht aus "" besteht, wird der String an der Cursorposition eingefügt


    Du kannst es auch so machen wie der Doc es vorschlägt, frißt aber mehr Speicher, wenn der Text länger wird ...

    EDIT:

    [autoit]


    GUICtrlSendMsg ($IDC_EDIT, $EM_SETSEL, -1, -1) ; Cursor ans Ende des Textes setzen
    GUICtrlSetData ($IDC_EDIT, "Neue Zeile" & @CRLF, 1) ; Zeile einfügen

    [/autoit]


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (18. September 2010 um 21:03)

  • [autoit]

    $hUser = GuiCtrlCreateEdit("", 550, 25, 80, 320, BitOR($ES_AUTOVSCROLL, $ES_AUtoHSCROLL, $ES_READONLY, $WS_VSCROLL),0)
    GuiCtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GuiCtrlSetColor(-1, 0x00FF00)
    GuiCtrlSetBkColor(-1, 0x808080)
    GuiCtrlSetCursor(-1, 2)

    [/autoit][autoit]

    Case "message"
    GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & BinaryToString(StringTrimLeft($aParameter[3], 4)))
    $user2 = StringTrimLeft($aParameter[4], 5)
    $user = _HexToString($user2)
    GUICtrlSetData($hUser, GUICtrlRead($hUser) & $user & @CRLF)

    [/autoit]

    so hier die 2 ausschnitte die ausschlaggebend sein sollten...

  • Ja mit dem Parameter gebe ich dir durchaus Recht :rolleyes: aber es ist sicherer wenn man immer alles ausliest und dann wieder hinschreibt.
    Wenn einer den Courser woanders hin klickt, wird nix mehr geschrieben.

    MfG
    Der_Doc

  • danke aber auch das hat nichts geholfen =(
    hab des alles angepast und es geht einfach nich er macht für jedes mal nen neuen namen dahin

  • Hallo Baaam,

    hier ein Skript das die Funktionalität von Der_Doc 's Vorschlag beweisst (bin mir sicher bei Greenhorn funktioniert es genauso:

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate("ans Ende anhängen", 600, 400)
    $hMemo = GUICtrlCreateEdit("",5,5,590,360)
    $hUser = GUICtrlCreateInput("",5,370,100,25)
    $hAdd = GUICtrlCreateButton("Hinzufügen",120,370,150,25)
    GUISetState()
    while 1
    $msg = GuiGetMsg()
    if $msg = $hAdd Then GuiCtrlSetData($hMemo,StringStripWS(GuiCtrlRead($hMemo) & @crlf & GUICtrlRead($hUser),1))
    ;der StringStripWS ist nur dafür notwendig, dass beim allerersten Eintrag keine Leerzeile davor kommt, kann weggelassen werden wenn das nicht stört
    if $msg =-3 Then Exit
    WEnd

    [/autoit]

    wenn du Probleme beim umsetzen hast, aber kein Skript postest ist dir nicht zu helfen,

    mfg autoBert

  • also es geht einfach nicht. entweder es kommt gar kein nick oder es kommen tausende oder bei jedem absenden ein neuer
    bloß das is ja nen bissl doof wenn nur 1 drin is und der immer einen dazu machen

    einmal hab ichs so probiert:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <String.au3>
    #include <GuiListBox.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $hConsole, $hForm, $hSendezeit, $hInput, $hButton, $hUser, $sServer_Ip, $iServer_Port, $iSocket, $sRecv, $iTimer, $hNick

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sServer_Ip = "chuckyfreak.dyndns.org"
    $iServer_Port = 1733
    $sRecv = ""
    $iTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    $hForm = GUICreate("Chatserver", 635, 388)
    GUISetCursor(2)
    GUISetBkColor(0x808080)
    $hConsole = GUICtrlCreateEdit("", 4, 24, 525, 335, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL), 0)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetBkColor(-1, 0x808080)
    GUICtrlSetCursor(-1, 2)
    $hSendezeit = GUICtrlCreateLabel("Sendezeit:", 400, 3, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    GUICtrlCreateLabel("Serverstatus:", 4, 4, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    $hStatus = GUICtrlCreateLabel("online", 130, 4, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetCursor(-1, 2)
    $hInput = GUICtrlCreateInput("", 4, 365, 525, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    GuiCtrlSetLimit(-1,"50")
    $hUser = GuiCtrlCreateEdit("", 550, 25, 80, 310, BitOR($ES_READONLY,""),0)
    GuiCtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GuiCtrlSetColor(-1, 0x00FF00)
    GuiCtrlSetBkColor(-1, 0x808080)
    GuiCtrlSetCursor(-1, 2)
    $hNick = GuiCtrlCreateInput("User",540,340,85,19)
    GuiCtrlSetCursor(-1,2)
    $hButton = GUICtrlCreateButton("Senden", 540, 365, 85, 19)
    GUICtrlSetCursor(-1, 2)
    GUISetState(@SW_SHOW)
    WriteConsole(" ~~~ TCP CHAT CLIENT BY AMrK ~~~ ")
    WriteConsole(" ~~~ EDITING BY PHILLI ~~~")

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()
    $iSocket = TCPConnect(TCPNameToIp ($sServer_Ip), $iServer_Port)
    If @error Then WriteConsole("No connection to Server")

    [/autoit] [autoit][/autoit] [autoit]

    Local $nMsg
    While 1
    $nMsg = GUIGetMsg()
    If $nMsg = -3 Then
    ExitLoop
    ElseIf $nMsg = $hButton Then
    Client_Senden()
    EndIf
    Server_Check()
    Server_Recv()
    If _IsPressed("0D", $dll) Then
    Client_Senden()
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    TCPCloseSocket($iSocket)
    TCPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Check()
    If TimerDiff($iTimer) > 9000 Then Server_Disconnected()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Client_Senden()
    Local $sPacket
    If GUICtrlRead($hInput) <> "" Then
    $sPacket = "time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
    "action=message" & @CRLF & _
    "msg=" & StringToBinary(GUICtrlRead($hInput)) & @CRLF & _
    "nick=" & StringToBinary(GUICtrlRead($hNick)) & @CRLF & @CRLF
    If TCPSend($iSocket, $sPacket) = 0 Then
    GuiCtrlSetData($hStatus, "offline")
    Server_Disconnected()
    EndIf
    GuiCtrlSetData($hInput, "")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Disconnected()
    $iTimer = TimerInit()
    WriteConsole("Server disconnected. Please restart!")

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Recv()
    Local $iPacketlaenge, $sPacket, $aParameter, $sAction, $aServerZeit, $aClientZeit, $iDelay
    $sRecv &= BinaryToString(TCPRecv($iSocket, 1024, 1))
    $iPacketlaenge = StringInStr($sRecv, @CRLF & @CRLF, 1)
    If $iPacketlaenge Then
    $sPacket = StringLeft($sRecv, $iPacketlaenge -1)
    $sRecv = StringTrimLeft($sRecv, $iPacketlaenge +3)
    $aParameter = StringSplit($sPacket, @CRLF, 1)
    $sAction = StringTrimLeft($aParameter[2], 7)
    Switch $sAction
    Case "connection"
    If StringTrimLeft($aParameter[3], 4) = "accept" Then
    WriteConsole("Chat joined!")
    Else
    WriteConsole("Chat refused: " & StringTrimLeft($aParameter[3], 4))
    EndIf
    Case "heartbeat"
    $iTimer = TimerInit()
    Case "message"
    GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & BinaryToString(StringTrimLeft($aParameter[3], 4)))
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & GUICtrlRead($hNick),1))

    EndSwitch
    $aServerZeit = StringSplit( StringTrimLeft($aParameter[1], 5), ".:-")
    $aClientZeit = StringSplit( @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC, ".:-")
    $iDelay = $aClientZeit[6] - $aServerZeit[6]
    GUICtrlSetData($hSendezeit, "Sendezeit: " & $iDelay)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func WriteConsole( $sText )
    If $sText <> "" Then GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & $sText & @CRLF)
    EndFunc

    [/autoit]

    und einmal so

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <String.au3>
    #include <GuiListBox.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $hConsole, $hForm, $hSendezeit, $hInput, $hButton, $hUser, $sServer_Ip, $iServer_Port, $iSocket, $sRecv, $iTimer, $hNick

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sServer_Ip = "chuckyfreak.dyndns.org"
    $iServer_Port = 1733
    $sRecv = ""
    $iTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    $hForm = GUICreate("Chatserver", 635, 388)
    GUISetCursor(2)
    GUISetBkColor(0x808080)
    $hConsole = GUICtrlCreateEdit("", 4, 24, 525, 335, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL), 0)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetBkColor(-1, 0x808080)
    GUICtrlSetCursor(-1, 2)
    $hSendezeit = GUICtrlCreateLabel("Sendezeit:", 400, 3, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    GUICtrlCreateLabel("Serverstatus:", 4, 4, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    $hStatus = GUICtrlCreateLabel("online", 130, 4, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetCursor(-1, 2)
    $hInput = GUICtrlCreateInput("", 4, 365, 525, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    GuiCtrlSetLimit(-1,"50")
    $hUser = GuiCtrlCreateEdit("", 550, 25, 80, 310, BitOR($ES_READONLY,""),0)
    GuiCtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GuiCtrlSetColor(-1, 0x00FF00)
    GuiCtrlSetBkColor(-1, 0x808080)
    GuiCtrlSetCursor(-1, 2)
    $hNick = GuiCtrlCreateInput("User",540,340,85,19)
    GuiCtrlSetCursor(-1,2)
    $hButton = GUICtrlCreateButton("Senden", 540, 365, 85, 19)
    GUICtrlSetCursor(-1, 2)
    GUISetState(@SW_SHOW)
    WriteConsole(" ~~~ TCP CHAT CLIENT BY AMrK ~~~ ")
    WriteConsole(" ~~~ EDITING BY PHILLI ~~~")

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()
    $iSocket = TCPConnect(TCPNameToIp ($sServer_Ip), $iServer_Port)
    If @error Then WriteConsole("No connection to Server")

    [/autoit] [autoit][/autoit] [autoit]

    Local $nMsg
    While 1
    $nMsg = GUIGetMsg()
    If $nMsg = -3 Then
    ExitLoop
    ElseIf $nMsg = $hButton Then
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & GUICtrlRead($hNick),1))
    Client_Senden()
    EndIf
    Server_Check()
    Server_Recv()
    If _IsPressed("0D", $dll) Then
    Client_Senden()
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    TCPCloseSocket($iSocket)
    TCPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Check()
    If TimerDiff($iTimer) > 9000 Then Server_Disconnected()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Client_Senden()
    Local $sPacket
    If GUICtrlRead($hInput) <> "" Then
    $sPacket = "time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
    "action=message" & @CRLF & _
    "msg=" & StringToBinary(GUICtrlRead($hInput)) & @CRLF & _
    "nick=" & StringToBinary(GUICtrlRead($hNick)) & @CRLF & @CRLF
    If TCPSend($iSocket, $sPacket) = 0 Then
    GuiCtrlSetData($hStatus, "offline")
    Server_Disconnected()
    EndIf
    GuiCtrlSetData($hInput, "")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Disconnected()
    $iTimer = TimerInit()
    WriteConsole("Server disconnected. Please restart!")

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Recv()
    Local $iPacketlaenge, $sPacket, $aParameter, $sAction, $aServerZeit, $aClientZeit, $iDelay
    $sRecv &= BinaryToString(TCPRecv($iSocket, 1024, 1))
    $iPacketlaenge = StringInStr($sRecv, @CRLF & @CRLF, 1)
    If $iPacketlaenge Then
    $sPacket = StringLeft($sRecv, $iPacketlaenge -1)
    $sRecv = StringTrimLeft($sRecv, $iPacketlaenge +3)
    $aParameter = StringSplit($sPacket, @CRLF, 1)
    $sAction = StringTrimLeft($aParameter[2], 7)
    Switch $sAction
    Case "connection"
    If StringTrimLeft($aParameter[3], 4) = "accept" Then
    WriteConsole("Chat joined!")
    Else
    WriteConsole("Chat refused: " & StringTrimLeft($aParameter[3], 4))
    EndIf
    Case "heartbeat"
    $iTimer = TimerInit()
    Case "message"
    GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & BinaryToString(StringTrimLeft($aParameter[3], 4)))
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & GUICtrlRead($hNick),1))

    EndSwitch
    $aServerZeit = StringSplit( StringTrimLeft($aParameter[1], 5), ".:-")
    $aClientZeit = StringSplit( @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC, ".:-")
    $iDelay = $aClientZeit[6] - $aServerZeit[6]
    GUICtrlSetData($hSendezeit, "Sendezeit: " & $iDelay)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func WriteConsole( $sText )
    If $sText <> "" Then GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & $sText & @CRLF)
    EndFunc

    [/autoit]

    beim ersten is es ziemlich weit unten das einegesetzte und beim zweiten in der while schleife mit $nMsg = GuiGetMsg()

    Fällt irgendjemanden noch einen Lösung ein?

  • Hallo Baaam,

    kann es sein dass du diese Lösung suchst:

    [autoit]

    if not StringInStr(GUICtrlRead($hUser),GUICtrlRead($hNick) & @crlf) Then _
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & GUICtrlRead($hNick),1))

    [/autoit]

    dass heisst den Nick nur eintragen, wenn er nicht bereits in der EditBox $hUser ist.

    Edit: wobei dies

    [autoit]

    if not StringInStr(GUICtrlRead($hUser),$aParameter[4] & @crlf) Then _
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & $aParameter[4],1))

    [/autoit]

    Nick wird aus dem empfangenen Datenpaket genommen, mehr Sinn macht.

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (19. September 2010 um 08:52)

  • nun wird 1 malk user geschrieben
    dann wieder user
    dann ändere ich namen in baaam
    schreibt er baaam
    und dann nochma baaam =(
    wenn es wem hilft dann nehmt mal das script und kommt drauf der server läuft und ich bin auch da dann könnt ihr euch selbst überzeugen

    edit: andere nichgesehn ich probiers mal

    edit2: also es geht einfach nicht. hier das script

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    #include <String.au3>
    #include <GuiListBox.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $hConsole, $hForm, $hSendezeit, $hInput, $hButton, $hUser, $sServer_Ip, $iServer_Port, $iSocket, $sRecv, $iTimer, $hNick

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $sServer_Ip = "chuckyfreak.dyndns.org"
    $iServer_Port = 1733
    $sRecv = ""
    $iTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    $hForm = GUICreate("Chatserver", 635, 388)
    GUISetCursor(2)
    GUISetBkColor(0x808080)
    $hConsole = GUICtrlCreateEdit("", 4, 24, 525, 335, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL), 0)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetBkColor(-1, 0x808080)
    GUICtrlSetCursor(-1, 2)
    $hSendezeit = GUICtrlCreateLabel("Sendezeit:", 400, 3, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    GUICtrlCreateLabel("Serverstatus:", 4, 4, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    $hStatus = GUICtrlCreateLabel("online", 130, 4, 130, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetCursor(-1, 2)
    $hInput = GUICtrlCreateInput("", 4, 365, 525, 19)
    GUICtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 2)
    GuiCtrlSetLimit(-1,"50")
    $hUser = GuiCtrlCreateEdit("", 550, 25, 80, 310, BitOR($ES_READONLY,""),0)
    GuiCtrlSetFont(-1, 12, 800, 0, "Fixedsys")
    GuiCtrlSetColor(-1, 0x00FF00)
    GuiCtrlSetBkColor(-1, 0x808080)
    GuiCtrlSetCursor(-1, 2)
    $hNick = GuiCtrlCreateInput("User",540,340,85,19)
    GuiCtrlSetCursor(-1,2)
    $hButton = GUICtrlCreateButton("Senden", 540, 365, 85, 19)
    GUICtrlSetCursor(-1, 2)
    GUISetState(@SW_SHOW)
    WriteConsole(" ~~~ TCP CHAT CLIENT BY AMrK ~~~ ")
    WriteConsole(" ~~~ EDITING BY PHILLI ~~~")

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()
    $iSocket = TCPConnect(TCPNameToIp ($sServer_Ip), $iServer_Port)
    If @error Then WriteConsole("No connection to Server")

    [/autoit] [autoit][/autoit] [autoit]

    Local $nMsg
    While 1
    $nMsg = GUIGetMsg()
    If $nMsg = -3 Then
    ExitLoop
    ElseIf $nMsg = $hButton Then
    Client_Senden()
    EndIf
    Server_Check()
    Server_Recv()
    If _IsPressed("0D", $dll) Then
    Client_Senden()
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    TCPCloseSocket($iSocket)
    TCPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Check()
    If TimerDiff($iTimer) > 9000 Then Server_Disconnected()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Client_Senden()
    Local $sPacket
    If GUICtrlRead($hInput) <> "" Then
    $sPacket = "time=" & @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & _
    "action=message" & @CRLF & _
    "msg=" & StringToBinary(GUICtrlRead($hInput)) & @CRLF & _
    "nick=" & StringToBinary(GUICtrlRead($hNick)) & @CRLF & @CRLF
    If TCPSend($iSocket, $sPacket) = 0 Then
    GuiCtrlSetData($hStatus, "offline")
    Server_Disconnected()
    EndIf
    GuiCtrlSetData($hInput, "")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Disconnected()
    $iTimer = TimerInit()
    WriteConsole("Server disconnected. Please restart!")

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Server_Recv()
    Local $iPacketlaenge, $sPacket, $aParameter, $sAction, $aServerZeit, $aClientZeit, $iDelay
    $sRecv &= BinaryToString(TCPRecv($iSocket, 1024, 1))
    $iPacketlaenge = StringInStr($sRecv, @CRLF & @CRLF, 1)
    If $iPacketlaenge Then
    $sPacket = StringLeft($sRecv, $iPacketlaenge -1)
    $sRecv = StringTrimLeft($sRecv, $iPacketlaenge +3)
    $aParameter = StringSplit($sPacket, @CRLF, 1)
    $sAction = StringTrimLeft($aParameter[2], 7)
    Switch $sAction
    Case "connection"
    If StringTrimLeft($aParameter[3], 4) = "accept" Then
    WriteConsole("Chat joined!")
    Else
    WriteConsole("Chat refused: " & StringTrimLeft($aParameter[3], 4))
    EndIf
    Case "heartbeat"
    $iTimer = TimerInit()
    Case "message"
    GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & BinaryToString(StringTrimLeft($aParameter[3], 4)))
    $string = StringTrimLeft($aParameter[4],5)
    if not StringInStr(GUICtrlRead($hUser),$aParameter[4] & @crlf) Then _
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & _HexToString($string),1))
    EndSwitch
    $aServerZeit = StringSplit( StringTrimLeft($aParameter[1], 5), ".:-")
    $aClientZeit = StringSplit( @MDAY & "." & @MON & "." & @YEAR & "-" & @HOUR & ":" & @MIN & ":" & @SEC, ".:-")
    $iDelay = $aClientZeit[6] - $aServerZeit[6]
    GUICtrlSetData($hSendezeit, "Sendezeit: " & $iDelay)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func WriteConsole( $sText )
    If $sText <> "" Then GUICtrlSetData($hConsole, GUICtrlRead($hConsole) & $sText & @CRLF)
    EndFunc

    [/autoit]

    der server ist da könnt einfach mal die datei starten und dann seht ihr selbst was ich meine^^

    Einmal editiert, zuletzt von Baaam (19. September 2010 um 11:28)

  • Hallo baam,

    ich konnte gerade testen, habe aber Erklärungsbedarf. Das sind die ScreenShots des 3. Testlaufs:autoit.de/wcf/attachment/11295/
    jetzt stellt sich die Frage, wass soll überhaupt in der Editbox $hUser angezeigt werden bzw. warum ist sie überhaupt vorhanden? Der Nick des Sendenden ist wohl unsinnig, der von dem die Nachricht kommt aber auch unnötig, da vor jeder Nachricht ja der Nick desSendenden erscheint.

    Edit: wäre nur sinn voll für eine History, wer alles gesendet hat dann so:

    [autoit]

    $aParameter[4] = StringTrimLeft(BinaryToString($aParameter[4]),5)
    if not StringInStr(GUICtrlRead($hUser),$aParameter[4]) Then _
    GuiCtrlSetData($hUser,StringStripWS(GuiCtrlRead($hUser) & @crlf & $aParameter[4],1))

    [/autoit]

    ich hatte in meinem vorhergehenden Post übersehen wieder zu String zu wandeln und "Nick=" wegzuTrimmen

    mfg autoBert

  • ja zu deiner frage nich wer alles gesendet hat sondern eigentlich sollte da rein wer online ist im chat
    dafür war diese box eigentlich gedacht