Очистка ненужного текста от ввода IRC-сервера - PullRequest
2 голосов
/ 21 февраля 2011

Я делаю простой IRC-клиент для себя, потому что я действительно не вижу необходимости в большом количестве функций mIRC, но у меня возникают проблемы при очистке ввода с сервера.

Прямо сейчас, при подключении, я получаю следующее:

[16:37]: young.home.net AUTH УВЕДОМЛЕНИЯ: ** Поиск вашего имени хоста ...
: young.home.net AUTH УВЕДОМЛЕНИЯ: ** Найден ваш хост
PING: DE7AED31
[16:37]: DE7AED31! Nospoof@young.home.net PRIVMSG Логан: ВЕРСИЯ
: young.home.net 451 PING: Вы не зарегистрированы
[16:37]: young.home.net 001 Логан: Добро пожаловать в IRC-сеть YoungNet Logan!lyoung@127.0.0.1
: young.home.net 002 Логан: Ваш хост - young.home.net, работает версия Unreal3.2.8.1 : young.home.net 003 Логан: Этот сервер был создан Вс 12 апреля 14:47:33 2009

Я пытаюсь почистить это так:

[16:37] -young.home.net- ** Поиск вашего имени хоста ...
[16:37] -young.home.net- ** Найден ваш хост
[16:37] [Logan] VERSION
[16:37] Вы не зарегистрированы
Добро пожаловать в IRC сеть YoungNet Logan!lyoung@127.0.0.1
Ваш хост - young.home.net, работает версия Unreal3.2.8.1 Этот сервер был создан вс 12 апр 14:47:33 2009

Я прочитал IRCP (RFC 1459), и я понимаю форматирование ввода с сервера, но я не могу удалить ненужные вещи ... Друг предложил загрузить вход в массив и разобраться с каждый пункт в отдельности, но я не могу заставить его работать. Я пытался, но это, кажется, не имеет значения ... Вот мой код

Public Function recv() As String
    Dim mail As String
    Try
        Dim Data(4096) As Byte
        sock.Receive(Data, 4096, Net.Sockets.SocketFlags.None)
        mail = System.Text.ASCIIEncoding.UTF8.GetString(Data)
        If mail.Contains(" ") Then
            If mail.Contains("PING") Then
                Dim pserv As String = mail.Substring(mail.IndexOf(":"), mail.Length - mail.IndexOf(":"))
                pserv = pserv.TrimEnd(Chr(0))
                'MsgBox("pserv: " & pserv)
                send("PONG " & pserv)
            ElseIf mail.Substring(mail.IndexOf(" ") + 1, 7) = "PRIVMSG" Then
                Dim tmparr() As String = Nothing
                Dim rnick, rmsg As String
                mail = mail.Remove(0, 1)
                tmparr = mail.Split("!")
                rnick = tmparr(0)
                tmparr = mail.Split(":")
                rmsg = tmparr(1)
                mail = "<" & rnick & "> " & rmsg
            ElseIf mail.Substring(mail.IndexOf(" ") + 1, 6) = "NOTICE" Then
                Dim tmparr() As String = Nothing
                Dim rnick, rmsg As String
                mail = mail.Remove(0, 1)
                tmparr = mail.Split("!")
                rnick = tmparr(0)
                tmparr = mail.Split(":")
                rmsg = tmparr(1)
                mail = "-" & rnick & "- " & rmsg
            Else
                Dim tmparr() As String = Nothing
                Dim rnick, rmsg As String
                tmparr = mail.Split(" ")
                rnick = tmparr(0)
                tmparr = mail.Split(":")
                rmsg = tmparr(1)
                mail = rmsg
            End If
        End If

        mail = g.Timestamp & mail

    Catch ex As Exception
        MsgBox(ex.ToString)
        mail = "ERROR: " & ex.Message & vbCrLf
    End Try
    Return mail
End Function

Любые указатели здесь будут с благодарностью.

1 Ответ

1 голос
/ 07 апреля 2011

ОК, я так занят после того, как нашел решение здесь, что полностью забыл о stackoverflow ...

[http://www.mirc.net/raws/][1]

[1]: http://www.mirc.net/raws/ содержит списокнеобработанных числовых кодов, которые аккуратно классифицируют выходные данные сервера для клиентского приложения.

Однако перед тем, как использовать необработанные числовые значения, необходимо выполнить несколько разделений.Смотрите ниже:

' This function takes the raw input from the server as a parameter.
' NOTE: No modification has been done before this point.

Private Function Clean(ByVal Target As String) As String
    ' Get each line
    Dim temp() As String = Target.Split(vbCrLf)
    Dim back As String = Nothing

    ' For each line in the current string
    For i As Integer = 0 To temp.Length - 1
        ' Split the line 
        Dim result() As String = temp(i).Split(New String() {" :"}, StringSplitOptions.None)
        Dim j As Integer = Nothing
        Try
            ' NOTICE AUTH messages aren't covered in raw format, so this cleans those up
            If result(0).Contains("NOTICE AUTH") Then
                If Left(result(0), 1) <> ":" Then
                    ' g.Timestamp = "[" & Now.Hour & ":" & Now.Minute & "]"
                    back += g.Timestamp & " (" & result(0).Substring(2, result(0).IndexOf(" ") - 2) & ") " & result(1) & vbCrLf
                Else
                    back += g.Timestamp & " (" & result(0).Substring(1, result(0).IndexOf(" ") - 1) & ") " & result(1) & vbCrLf
                    g.host = result(0).Substring(1, result(0).IndexOf(" ") - 1)
                End If
            End If

            If Integer.TryParse(result(0).Substring(result(0).IndexOf(" ") + 1, 3), j) Then
                Select Case result(0).Substring(result(0).IndexOf(" ") + 1, 3)
                    ' For each code, modify the input here, this is just an example of what I've done...
                    Case "001" : back += ":=:" & vbCrLf & g.Timestamp & result(1) & vbCrLf
                End Select
            End If
        Catch ex As Exception

        End Try
    Next

    ' More stuff goes here (handling PING? PONG! events and such)

    Return back
End Function
...