2014-02-06 4 views
0

Итак, бот соединяется просто отлично, но когда я создаю бота, форма падает. Бот остается связанным, но и команды! О не работают. Если я использую тот же самый точный код с консольным приложением, все работает нормально. Проблема только форма UIОшибка IRC Bot GUI?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 
using System.Net.Sockets; 

namespace cIRCBot 
{ 
    public partial class bSetup : Form 
    { 
     public bSetup() 
     { 
      InitializeComponent(); 
     } 

     private void createbotbtn_Click(object sender, EventArgs e) 
     { 
      string buf, nick, owner, server, chan; 
      int port; 
      TcpClient sock = new TcpClient(); 
      TextReader input; 
      TextWriter output; 

      //Get nick, owner, server, port, and channel from user 
      nick = botnick.Text; 
      owner = botname.Text; 
      server = servername.Text; 
      bool isNumber = int.TryParse(portnum.Text, out port); 
      chan = channelname.Text; 

      if (isNumber == false) 
      { 
       MessageBox.Show("Failed to connect. Make sure the server address and port number are correct.", "Connection Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       return; 
      } 

      //Connect to irc server and get input and output text streams from TcpClient. 
      sock.Connect(server, port); 
      if (!sock.Connected) 
      { 
       //Console.WriteLine("Failed to connect!"); 
       return; 
      } 
      else 
      { 
       this.Close(); 
       input = new StreamReader(sock.GetStream()); 
       output = new StreamWriter(sock.GetStream()); 

       //Starting USER and NICK login commands 
       output.Write(
        "USER " + nick + " 0 * :" + owner + "\r\n" + 
        "NICK " + nick + "\r\n" 
       ); 
       output.Flush(); 


       //Process each line received from irc server 
       for (buf = input.ReadLine(); ; buf = input.ReadLine()) 
       { 

        //Display received irc message 
        //Console.WriteLine(buf); 

        //Send pong reply to any ping messages 
        if (buf.StartsWith("PING ")) { output.Write(buf.Replace("PING", "PONG") + "\r\n"); output.Flush(); } 
        if (buf[0] != ':') continue; 

        /* IRC commands come in one of these formats: 
        * :[email protected] COMMAND ARGS ... :DATA\r\n 
        * :SERVER COMAND ARGS ... :DATA\r\n 
        */ 

        //After server sends 001 command, we can set mode to bot and join a channel 
        if (buf.Split(' ')[1] == "001") 
        { 
         output.Write("MODE " + nick + " +B\r\n" + "JOIN " + chan + "\r\n"); 
         output.Flush(); 
         if (buf.Contains("!about")) 
         { 

          output.WriteLine("PRIVMSG {0} :" + "I'm a shitty little bot coded by " + botname, channelname); 
          output.Flush(); 
         } 
        } 
       } 
      } 
     } 

    } 
} 

Это главное окно, у меня есть другой вид, который вы используете для установки

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace cIRCBot 
{ 
    public partial class mWin : Form 
    { 
     public mWin() 
     { 
      InitializeComponent(); 
     } 

     private void newBotToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      bSetup bSetup = new bSetup(); 
      bSetup.Show(); 

     } 

     private void quitToolStripMenuItem1_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); 
     } 
    } 
} 

Это окно настройки

+0

Вы должны дать еще несколько кода для анализа этого. Вам нужен код формы. –

+0

ok Я добавил другую форму, не уверен, что вы тоже хотите увидеть коды дизайнеров, @ GrzegorzSławecki – OGF

+0

Что случилось? Трассировки стека? –

ответ

0

Я подозреваю, что причина в том, что вы делаете this.Close(), и он становится утилизированным. После звонка Close() вы идете в for() и пытаетесь работать с возможными удаленными ресурсами.

+0

Я попытался удалить его и попробовать без него, тот же результат. – OGF

+0

Я все еще получаю исключение сокета ... Вы должны поймать это в своем коде. У вас есть какие-либо действительные детали соединения, чтобы попробовать? –

+0

Да, я получаю это, когда я ввожу неправильный порт/тот, который не существует, в противном случае, если это правильно, бот соединяет сбой программы, и бот, очевидно, не отключается, пока я не завершу файл .exe – OGF

Смежные вопросы