vb 2015 - Chat mit UTicket.dll
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
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 -
Funktioniert der Code der mir freundlicher Weise geschickt wurde, überhaupt?Wie man mich kontaktieren kann:
thiemo-melhorn.de -
-
~blaze~ schrieb:
Auf der Senderseite beim Abschicken von normalen Texten:
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
- Dim receivedText As StringBuilder = Nothing
- Dim isEscaped As Boolean = False
- For Each c As Char in input
- If isEscaped Then
- If c = "a"c Then
- 'Der andere Teilnehmer tippt ==> siehe Timer
- otherIsTypingLabel.Show()
- otherIsNotTypingTimer.Stop()
- otherIsNotTypingTimer.Start()
- End If
- Else If c = "\"c Then
- isEscaped = True
- Continue For
- End If
- If receivedText Is Nothing Then receivedText = New StringBuilder()
- receivedText.Append(c)
- isEscaped = False
- Next
- 'Empfangenen Text rausschicken
- history.AppendText(If(receivedText Is Nothing, input, receivedText.ToString()))
otherIsNotTypingTimer enthält im Tick-Event
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
- Imports System.Text
- Public Class ChatForm
- Private Sub Send(output As String)
- 'TODO: Hier die Routine zum Senden über Chat in Gang setzen
- '----------------------------------------------------
- Receive(output, "Chatteilnehmer")
- End Sub
- 'TODO: Diese Methode mit dem über Netzwerk empfangenen Inhalt aufrufen
- Private Sub Receive(input As String, sender As String)
- Dim receivedText As StringBuilder = Nothing
- Dim isEscaped As Boolean = False
- For Each c As Char In input
- If isEscaped Then
- isEscaped = False
- '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
- If c = "a"c Then
- 'Der andere Teilnehmer tippt. Wenn diese Nachricht vor Ablauf des Timers nicht empfangen wird, wird das Label wieder ausgeblendet.
- otherIsTypingLabel.Show()
- 'Timer neustarten
- otherIsNotTypingTimer.Stop()
- otherIsNotTypingTimer.Start()
- Continue For
- End If
- ElseIf c = "\"c Then
- 'Es wird ein Zeichen empfangen, das mit "\" escaped wurde, z.B. "\a" oder "\\"
- isEscaped = True
- Continue For
- End If
- '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.
- 'Zusätzlich dazu kann man in Parameter sender angeben, wer geschrieben hat.
- If receivedText Is Nothing Then receivedText = New StringBuilder(sender).Append(" schrieb: ")
- receivedText.Append(c)
- Next
- 'Empfangenen Text in die history schreiben, aber nur dann, wenn wirklich ein Text empfangen wurde
- If receivedText IsNot Nothing Then
- receivedText.AppendLine()
- historyTextBox.AppendText(receivedText.ToString())
- End If
- End Sub
- Private Sub inputTextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles inputTextBox.KeyDown
- 'Beim Drücken der Enter-Taste wird der Text in der inputTextBox geschickt und anschließend auf "" zurückgesetzt
- If e.KeyCode = Keys.Enter Then
- If inputTextBox.TextLength > 0 Then
- 'Text wird vor dem Senden mit Escapezeichen versehen
- Send(inputTextBox.Text.Replace("\", "\\"))
- inputTextBox.Text = String.Empty
- End If
- End If
- End Sub
- Private Sub inputTextBox_TextChanged(sender As Object, e As EventArgs) Handles inputTextBox.TextChanged
- 'Bei einer Eingabe wird "\a" geschickt
- Send("\a")
- End Sub
- Private Sub otherIsNotTypingTimer_Tick(sender As Object, e As EventArgs) Handles otherIsNotTypingTimer.Tick
- 'Nach Ablauf des Timers wird das "Es wird getippt"-Label ausgeblendet. Es wurde während Ablauf des Timers keine "\a"-Nachricht mehr empfangen.
- otherIsTypingLabel.Hide()
- otherIsNotTypingTimer.Stop()
- End Sub
- End Class
Viele Grüße
~blaze~Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()
-
Vielen herzlichen Dank für den Code.Wie man mich kontaktieren kann:
thiemo-melhorn.deDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thiemo1991“ ()
-
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).
-
Wie man mich kontaktieren kann:
thiemo-melhorn.deDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thiemo1991“ ()
-
-
Diese Klasse gibt es bei mir nicht da ich meinen Chat auch nicht komplett umbenannt habe sowie es in der Vorlage sein muss.Wie man mich kontaktieren kann:
thiemo-melhorn.de -
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. -
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.
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.
Signature-Move
kein Problem mit privaten Konversationen zu Thema XY
-
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
- Private Sub utc_UTicketArrived1(sSenderID As String, bSentToAll As Boolean, sCommand As String, oUserData As List(Of Object)) Handles utc.UTicketArrived
- Select Case sCommand
- Case "chat"
- rtbChatAusgabe.AppendText("[" & getUhrZeit() & "] " & sSenderID & ": " & oUserData(0).ToString & vbNewLine)
- End Select
- End Sub
und
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.deDieser 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? -
-
Ähnliche Themen
-
10 Benutzer haben hier geschrieben
- Thiemo1991 (32)
- ~blaze~ (14)
- φConst (12)
- thefiloe (6)
- ThuCommix (2)
- ichduersie (2)
- EaranMaleasi (2)
- Gast (2)
- RodFromGermany (1)
- Acr0most (1)