IRC Client Thread Frage

Xarfai

Mitglied
Hallo ;)

Ich benutze die SmartIrc4Net Library und schreib annem kleinen IRC Clienten nun auf Consolen Basis t die Klasse, aber nun wollte ich diese natürlich mit Forms realisieren nur da fehlt mir irgendwie die Erfahrung wie man da die Threads machen müsste nimmt man den gleichen Code wie bei der ConsolenAnwendung schmiert das Programm beim Connecten ab weil er halt nicht den Thread hat wo die Console auf die Eingabe des Befehls wartet. Jemand ne Idee wie man sonen Thread mit Forms realisiern könnte?

Benutze ich irc.ListenOnce() in einer for schleife und lasse die bis 102 laufen gehts bei 103 stürzt er ab, dann kann ich zwar nachrichten in den Channel schreiben aber ich seh nicht mehr die aktuellen Sachen die man über irc.Listen kriegen würde.

Hier nochmal schnell der Code, bitte nicht wundern der Code ist echt naja .. wirsch ;) aber sollte verständlich sein.

Danke schonmal

Greetz Xarf

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Meebey.SmartIrc4net;
using System.Collections;
using System.Threading;


namespace irc
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void schreiben(string text)
        {
            chat.AppendText(text);
        }

        public void schreiben2(string text)
        {
            listBox2.Items.Add(text);
        }

        public static IrcClient irc = new IrcClient();


            public void OnQueryMessage(object sender, IrcEventArgs e)
            {
                switch (e.Data.MessageArray[0])
                {

                    case "dump_channel":
                        string requested_channel = e.Data.MessageArray[1];
                        
                        Channel channel = irc.GetChannel(requested_channel);

                        irc.SendMessage(SendType.Message, e.Data.Nick, "<channel '" + requested_channel + "'>");

                        irc.SendMessage(SendType.Message, e.Data.Nick, "Name: '" + channel.Name + "'");
                        irc.SendMessage(SendType.Message, e.Data.Nick, "Topic: '" + channel.Topic + "'");
                        irc.SendMessage(SendType.Message, e.Data.Nick, "Mode: '" + channel.Mode + "'");
                        irc.SendMessage(SendType.Message, e.Data.Nick, "Key: '" + channel.Key + "'");
                        irc.SendMessage(SendType.Message, e.Data.Nick, "UserLimit: '" + channel.UserLimit + "'");


                        string nickname_list = "";
                        foreach (DictionaryEntry de in channel.Users)
                        {
                            string key = (string)de.Key;
                            ChannelUser channeluser = (ChannelUser)de.Value;
                            nickname_list += "(";
                            if (channeluser.IsOp)
                            {
                                nickname_list += "@";
                            }
                            if (channeluser.IsVoice)
                            {
                                nickname_list += "+";
                            }
                            nickname_list += ")" + key + " => " + channeluser.Nick + ", ";
                          
                        }
                        irc.SendMessage(SendType.Message, e.Data.Nick, nickname_list);
                        schreiben2("1");
                        irc.SendMessage(SendType.Message, e.Data.Nick, "</channel>");
                        break;
                    case "gc":
                        GC.Collect();
                        break;
                    
                    case "join":
                        irc.RfcJoin(e.Data.MessageArray[1]);
                        break;
                    case "part":
                        irc.RfcPart(e.Data.MessageArray[1]);
                        break;
                    case "die":
                        Exit();
                        break;
                }
            }

          
            public void OnError(object sender, ErrorEventArgs e)
            {
                schreiben("Error: " + e.ErrorMessage+"\n");
                Exit();
            }

            
            public void OnRawMessage(object sender, IrcEventArgs e)
            {
                schreiben("Received: " + e.Data.RawMessage + "\n");
            }

            public void Main2()
            {
                Thread.CurrentThread.Name = "Main2";

                irc.Encoding = System.Text.Encoding.UTF8;

                
                irc.SendDelay = 200;

               
                irc.ActiveChannelSyncing = true;

  
                irc.OnQueryMessage += new IrcEventHandler(OnQueryMessage);
                irc.OnError += new ErrorEventHandler(OnError);
                irc.OnRawMessage += new IrcEventHandler(OnRawMessage);

                string[] serverlist;

                serverlist = new string[] { "de.quakenet.org" };
                int port = 6667;
                string channel = "#Xarf";
                try
                {
                   
                    irc.Connect(serverlist, port);
                }
                catch (ConnectionException e)
                {
                    
                    schreiben("couldn't connect! Reason: " + e.Message + "\n");
                    Exit();
                }

                try
                {
                
                    irc.Login(txtNick.Text, txtmail.Text);

                    irc.RfcJoin(channel);

                    // Hier müsste der Thread starten um die Eingabe zu checken

                    irc.Listen();

                    irc.Disconnect();
                       


                }
                catch (ConnectionException)
                {

                    Exit();
                }
                catch (Exception e)
                {
                    
                    schreiben("Error occurred! Message: " + e.Message + "\n");
                    schreiben("Exception: " + e.StackTrace + "\n");
                    Exit();
                }
            }

            public static void Exit()
            {
                MessageBox.Show("Exiting...");
                System.Environment.Exit(0);
            }

        private void listen()
        {
            irc.SendMessage(SendType.Message, "#Xarf", textBox1.Text);
        }

        private void button2_Click(object sender, EventArgs e)
        {

            Main2();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            irc.SendMessage(SendType.Message, "#Xarf", textBox1.Text);
            textBox1.Text = "";
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                listen();
                textBox1.Text = "";
            }
        }
        }
    }
 
Zurück