vb 2015 - Chat mit UTicket.dll

  • VB.NET

Es gibt 73 Antworten in diesem Thema. Der letzte Beitrag () ist von Thiemo1991.

    Es ist im Grunde nicht so schwer:

    Sobald der Benutzer anfängt zu schreiben, schickst du ein Packet zum anderen PC, in dem steht: "Hey, ich schreibe!". Wenn der Benutzer aufhört zu schreiben, schickst du eine weitere Nachricht, in der du dem anderen PC mitteilst, dass du nicht mehr schreibst. Sobald du nun auf dem zweiten Rechner die Nachricht "Hey, ich schreibe!" empfängst, kannst du ja z.B. ein Label einblenden, in welchem angezeigt wird, dass der Gegenüber schreibt. Und wenn du die zweite Nachricht empfängst, blendest du es wieder aus.

    LG :)

    ~blaze~ schrieb:

    Auf der Senderseite beim Abschicken von normalen Texten:

    VB.NET-Quellcode

    1. inputTextBox.Text.Replace("\", "\\")

    und zusätzlich im TextChanged-Ereignis der TextBox den Text "\a" verschicken.
    Auf der Empfängerseite (dort, wo du eigentlich in die TextBox schreibst):
    input ist der empfangene Text, otherIsNotTypingTimer ist der Timer unten, history ist die TextBox, die den Gesprächsverlauf enthält, otherIsTypingLabel ist das Label, das anzeigt, ob der andere Teilnehmer tippt (==> die Visible-Eigenschaft ist standardmäßig auf False zu setzen).

    VB.NET-Quellcode

    1. Dim receivedText As StringBuilder = Nothing
    2. Dim isEscaped As Boolean = False
    3. For Each c As Char in input
    4. If isEscaped Then
    5. If c = "a"c Then
    6. 'Der andere Teilnehmer tippt ==> siehe Timer
    7. otherIsTypingLabel.Show()
    8. otherIsNotTypingTimer.Stop()
    9. otherIsNotTypingTimer.Start()
    10. End If
    11. Else If c = "\"c Then
    12. isEscaped = True
    13. Continue For
    14. End If
    15. If receivedText Is Nothing Then receivedText = New StringBuilder()
    16. receivedText.Append(c)
    17. isEscaped = False
    18. Next
    19. 'Empfangenen Text rausschicken
    20. history.AppendText(If(receivedText Is Nothing, input, receivedText.ToString()))


    otherIsNotTypingTimer enthält im Tick-Event

    VB.NET-Quellcode

    1. otherIsTypingLabel.Hide()


    Das ist meine Idee umgesetzt.

    Viele Grüße
    ~blaze~


    Dieser Coder wurde mir hier im Forum gepostet.
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    Kleine Fehler waren leider drin. Ist der Nachteil, wenn man nur mobil online ist.

    Hier mal ein vollständig lauffähiges Beispiel ohne Chat.
    Einfach obige Anweisung bzgl. Steuerelementen erfüllen: otherIsNotTypingTimer ist ein Timer, inputTextBox ist die Eingabetextbox, historyTextBox ist der Chatverlauf, oterIsTypingLabel ist das Label, das angezeigt wird, wenn der andere tippt. Lege dazu am besten ein neues Projekt oder eine neue Form an.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Public Class ChatForm
    3. Private Sub Send(output As String)
    4. 'TODO: Hier die Routine zum Senden über Chat in Gang setzen
    5. '----------------------------------------------------
    6. Receive(output, "Chatteilnehmer")
    7. End Sub
    8. 'TODO: Diese Methode mit dem über Netzwerk empfangenen Inhalt aufrufen
    9. Private Sub Receive(input As String, sender As String)
    10. Dim receivedText As StringBuilder = Nothing
    11. Dim isEscaped As Boolean = False
    12. For Each c As Char In input
    13. If isEscaped Then
    14. isEscaped = False
    15. 'Hier werden alle Escapezeichen verwertet. Ist eine ungültige Kombination (z.B. "\b") oder "\\" der Fall, wird das Zeichen einfach ohne vorangehendes "\" in receivedText geschrieben
    16. If c = "a"c Then
    17. 'Der andere Teilnehmer tippt. Wenn diese Nachricht vor Ablauf des Timers nicht empfangen wird, wird das Label wieder ausgeblendet.
    18. otherIsTypingLabel.Show()
    19. 'Timer neustarten
    20. otherIsNotTypingTimer.Stop()
    21. otherIsNotTypingTimer.Start()
    22. Continue For
    23. End If
    24. ElseIf c = "\"c Then
    25. 'Es wird ein Zeichen empfangen, das mit "\" escaped wurde, z.B. "\a" oder "\\"
    26. isEscaped = True
    27. Continue For
    28. End If
    29. 'Es wird ein Inhalt empfangen, wenn nicht alle Zeichen Steuerzeichen ("\a") oder dergleichen sind. Also bspw. "\aDies ist ein Text" wäre auch gültig und "Dies ist ein Text" würde in receivedText geschrieben.
    30. 'Zusätzlich dazu kann man in Parameter sender angeben, wer geschrieben hat.
    31. If receivedText Is Nothing Then receivedText = New StringBuilder(sender).Append(" schrieb: ")
    32. receivedText.Append(c)
    33. Next
    34. 'Empfangenen Text in die history schreiben, aber nur dann, wenn wirklich ein Text empfangen wurde
    35. If receivedText IsNot Nothing Then
    36. receivedText.AppendLine()
    37. historyTextBox.AppendText(receivedText.ToString())
    38. End If
    39. End Sub
    40. Private Sub inputTextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles inputTextBox.KeyDown
    41. 'Beim Drücken der Enter-Taste wird der Text in der inputTextBox geschickt und anschließend auf "" zurückgesetzt
    42. If e.KeyCode = Keys.Enter Then
    43. If inputTextBox.TextLength > 0 Then
    44. 'Text wird vor dem Senden mit Escapezeichen versehen
    45. Send(inputTextBox.Text.Replace("\", "\\"))
    46. inputTextBox.Text = String.Empty
    47. End If
    48. End If
    49. End Sub
    50. Private Sub inputTextBox_TextChanged(sender As Object, e As EventArgs) Handles inputTextBox.TextChanged
    51. 'Bei einer Eingabe wird "\a" geschickt
    52. Send("\a")
    53. End Sub
    54. Private Sub otherIsNotTypingTimer_Tick(sender As Object, e As EventArgs) Handles otherIsNotTypingTimer.Tick
    55. 'Nach Ablauf des Timers wird das "Es wird getippt"-Label ausgeblendet. Es wurde während Ablauf des Timers keine "\a"-Nachricht mehr empfangen.
    56. otherIsTypingLabel.Hide()
    57. otherIsNotTypingTimer.Stop()
    58. End Sub
    59. End Class


    Viele Grüße
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Nein auf keinen Fall. Das kann dann niemals funktionieren!

    Im ernst. Wollte mich echt zurückhalten aber bist du überhaupt im Entferntesten an der Lösung des Problems interessiert?
    Erst bekommst du auf eine mehr als schlechte Fragestellung haufenweise konstruktiver Antworten. Am Ende sogar noch Beispielcodes. Anstelle diese auszuprobieren bzw. basierend darauf etwas auf die Beine zu stellen, stellst du deren Funktionalität in Frage. Nun bekommst du einen komplett Code geliefert und schaffst es nicht mal auszuprobieren ob das Ändern der Namen dessen Funktionstüchtigkeit beeinflusst (mal davon abgesehen, dass dir offensichtlich sämtliches Verständnis für alles was im entferntesten mit Programmierung zu tun hat, fehlt - noch immer).

    Vorschlag: Probier doch mal was aus. Versuch zu verstehen was du da überhaupt machst anstatt solange nachzubohren bis du es 1 zu 1 kopieren kannst. Versuch eine Logik nachzuvollziehen bzw. selbst auf eine Logik drauf zu kommen.
    Und wenn das nicht klappt, dann probier doch so simple Geschichten wie das Anpassen der Namen einfach aus. Der Lerneffekt wäre um das x Fache höher(höher als derzeit - null).


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ich habe nun die Namen die im Code sind, bei mir umgeändert. Bei

    VB.NET-Quellcode

    1. ​Send("\a")
    gibt es ein Problem dass das nicht erkannt wird. Was ist das überhaupt?
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thiemo1991“ ()

    Ja und dann fragst du dich weshalb es die Methode nicht gibt?
    Wenn man fertigen Code nicht einbinden kann... kann man wirklich nicht weiterhelfen.
    Hör mal: Jeder hat mal angefangen. Und offensichtlich bist du ganz, ganz, ganz am Anfang ohne jegliche Vorkenntnisse. Also leg das Projekt vorerst auf Eis. Lies dich ein wenig ein, dann fällt dir das Projekt anschließend viel leichter.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ich habe nun das Problem zwar behoben aber nun habe ich ein weiteres "Problem" und zwar wenn ich schreibe dass jeder Buchstabe einzeln in die RichTextBox kommt. Ich denke mir dass ich noch einen anderen Intervall beim Timer brauche aber welchen weis ich nicht. Könnt ihr bzw. du mir sagen, was ich dafür ein Intervall beim Timer eingeben muss dass der nicht jeden einzelnen Buchstaben in die RichTextBox übergibt?
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    @thefiloe: Bitte verhalte dich doch etwas freundlicher.

    Der Intervall des Timers spielt keine Rolle für die Eingabe, der blendet lediglich das Label nach einem gewissen Intervall aus.

    VB.NET-Quellcode

    1. Send("\a")

    soll die Zeichenkette \a über Netzwerk übertragen, d.h. die Aufgabe ist es, das über deinen Client (UTicketClient) zu schicken und zwar so, als ob du den Text eines Textfeldes schickst.

    Ich schreibe dir den Code vllt nochmal um.

    Viele Grüße
    ~blaze~
    Bei mir geht das senden sowie das empfangen der Texte nicht mehr wirklich. Das soll heißen dass die Buchstaben alle einzeln in die RichTextBox übertragen können. Ich weiß nicht mal warum es so ist. Kann man mir eventuell in den Code den ich schon hier in das Forum gepostet habe, schon rein machen?
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    Nein.

    Dein Projekt, Deine Ideen, Deine Übung
    Deine Zeit die fürs tüfteln, verstehen und lernen zu opfern ist.

    auch wenn es @thefiloe sehr hart ausgedruckt hat: Ohne Vorkenntnisse (oder auch die Fähigkeit funktionierenden Code in dein vorhandenes Projekt einzubinden und ggf. ein wenig anzupassen) kann dein Vorhaben nicht gelingen.
    Alle im Forum helfen gerne, aber nicht wenn Sie dein Programm komplett für dich schreiben sollen.

    Du musst das selbe durchmachen wie alle anderen auch: Programmieren -> Testen -> Debuggen -> An Fehlern die Zähne ausbeissen
    Und erst wenn du dein Problem genauer/genaustens Definieren und Beschreiben kannst bekommst du die passende Antwort.
    (In kleinen Schritten, nicht das Ganze Projekt posten und sagen es funktioniert nicht. Wenn du beim Fleischer ein Steak willst, schmeißt man dir doch auch nicht das ganze Rind hin und drückt dir ein Messer in die Hand.)


    wie gesagt es ist kompliziert, vor allem am Anfang, aber ohne Selbstbeteiligung und Durchhaltevermögen werden die beste Ideen und Übungen nie umgesetzt geschweige denn verstanden.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Send (Senden) und Receive (Empfangen) sind ja eigentlich klar, oder?
    Der Aufruf von Send wird durch UTicketClient.Send oder irgendwas ähnliches ersetzt, dann muss es noch ein Ereignis oder etwas anderes geben, das beim Empfang ausgelöst wird. Dort rufst du Receive ab.
    Die entsprechenden Stellen sind übrigens

    VB.NET-Quellcode

    1. Private Sub utc_UTicketArrived1(sSenderID As String, bSentToAll As Boolean, sCommand As String, oUserData As List(Of Object)) Handles utc.UTicketArrived
    2. Select Case sCommand
    3. Case "chat"
    4. rtbChatAusgabe.AppendText("[" & getUhrZeit() & "] " & sSenderID & ": " & oUserData(0).ToString & vbNewLine)
    5. End Select
    6. End Sub

    und

    VB.NET-Quellcode

    1. utc.sendUTicket(cmbEmpfaengerChat.Text, "chat", txtChatEingabe.Text)


    Hätte ich mir die angeschaut, hätte ich auch eine andere Möglichkeit gehabt, das Senden zu gestalten. ;)
    Wäre das Escaping nicht mehr nötig gewesen.

    Viele Grüße
    ~blaze~
    Danke @~blaze~ für die wirkliche Hilfe. Was muss ich den worein schreiben so dass es auch wirklich richtig funktionieren kann? Ich hätte schon eine Idee aber ich weis nicht ob das überhaupt funktionieren.
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thiemo1991“ ()

    Thiemo1991 schrieb:

    Danke @~blaze~ für die wirkliche Hilfe. Was muss ich den worein schreiben so dass es auch wirklich richtig funktionieren kann? Ich hätte schon eine Idee aber ich weis nicht ob das überhaupt funktionieren.


    Dann probiers aus?
    Ich habe es so probiert dass ich den Teil auch vom "chatAbsenden" noch zusätzlich in den Sub "Send" gepackt habe und es macht immer noch den gleichen "Fehler". Kann irgendwer mir nun bitte so helfen dass ich es auch verstehe?

    Wie man mich kontaktieren kann:
    thiemo-melhorn.de