All pastes #473633 Raw Edit

Thread_wi

public text v1 · immutable
·published 2007-05-06 10:33 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace Client_IRC
{
    public partial class Dialogue : Form
    {
        // Création du socket de connexion au server.
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        // Délégué pour la gestion de la ChatBox par le ThreadAffichage.
        private delegate void TextBoxDelegateHandler(string str);
        private TextBoxDelegateHandler TextBoxDelegate;
        byte[] reception = new byte[256];

        public Dialogue()
        {
            InitializeComponent();
            TextBoxDelegate = new TextBoxDelegateHandler(UpdateData);
            Thread t_reception = new Thread(new ThreadStart(ThreadReception));
            Thread t_affichage = new Thread(new ThreadStart(ThreadAffichage));

            socket.Connect(new IPEndPoint(Dns.GetHostAddresses("irc.langochat.net")[0], 6667));
            
            t_reception.Start();
            t_affichage.Start();
            byte[] envoi = Encoding.Default.GetBytes("NICK Tastee\r\nUSER guest tolmoon tolsun :Ronnie Reagan\r\n");

            try
            {
                int i = socket.Send(envoi, 0, envoi.Length, SocketFlags.None);
                ChatBox.Text = "Envoyé: " + i + " octets.\r\n";
            }
            catch (SocketException Ex)
            {
                MessageBox.Show("Erreur: " + Ex.Message);
            }
        }
        private void UpdateData(string str)
        {
            ChatBox.Text += str;
        }

        private void ThreadReception()
        {
            while (true)
            {
                try
                {
                    socket.Receive(reception, 0, reception.Length, SocketFlags.None);
                }
                catch (SocketException Ex)
                {
                    MessageBox.Show("Connexion interrompue: " + Ex.Message);
                    Thread.CurrentThread.Abort();
                }
                Thread.Sleep(0);
            }
        }
        private void ThreadAffichage()
        {
            try
            {
                Invoke(TextBoxDelegate, "< " + Encoding.ASCII.GetString(reception));
            }
            catch
            {
                Thread.CurrentThread.Abort();
            }
            Thread.Sleep(0);
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                byte[] envoi = Encoding.ASCII.GetBytes(textBox1.Text);
                int i = socket.Send(envoi, 0, envoi.Length, SocketFlags.None);
                ChatBox.Text += "> " + textBox1.Text + " (" + i + " octets envoyés)." + "\r\n";
                textBox1.Text = "";
            }
        }
    }
}