using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net;
using System.Threading;
using System.Net.Sockets;
using System.Text;
namespace SaTaNaDcMaSS
{
/// <summary>
/// Summary description for Connetti.
/// </summary>
public class StateObject
{
public Socket workSocket = null;
public const int BufferSize = 1024*1024;
public byte[] buffer
= new byte[BufferSize
];
public string sb = "";
}
public class Connetti
{
StateObject state
= new StateObject
();
string nick = DcUser.GetNick();
string conn = DcUser.GetConn();
string share = DcUser.GetShare();
string descr = DcUser.GetDescr();
string tag = DcUser.GetTag();
string mail = DcUser.GetEmail();
RichTextBox txt;
TextBox messaggio;
ListBox userlist;
Button connetti;
Button disconnetti;
Button manda;
bool rotfl=true;
bool invio = false;
string hub;
string porta;
private IPHostEntry host;
private Socket socket;
private IPEndPoint indirizzoeporta;
MenuItem menuItem1;
MenuItem menuItem2;
MenuItem menuItem15;
StatusBarPanel nomehubz;
StatusBarPanel n_user;
int lol=0;
byte[] buffers
= new byte[1024
*1024
];
string content="";
ArrayList users
= new ArrayList
();
ArrayList ops
= new ArrayList
();
public Connetti(RichTextBox txt,TextBox messaggio,ListBox userlist,StatusBarPanel nomehubz,StatusBarPanel n_user,Button connetti,Button disconnetti,Button manda,string hub,string porta)
{
this.nomehubz=nomehubz;
this.n_user=n_user;
this.txt=txt;
this.messaggio=messaggio;
this.userlist=userlist;
this.connetti=connetti;
this.disconnetti=disconnetti;
this.manda=manda;
this.hub=hub;
this.porta=porta;
this.
manda.
Click += new System.
EventHandler(this.
manda_Click);
this.
disconnetti.
Click += new System.
EventHandler(this.
disconnetti_Click);
this.
messaggio.
KeyPress += new System.
Windows.
Forms.
KeyPressEventHandler(this.
messaggio_KeyPress);
Connettiti();
}
public void ReadCallback(IAsyncResult ar)
{
try
{
if(rotfl && socket.Connected)
{
StateObject state = (StateObject) ar.AsyncState;
Socket handler = socket;
int bytesRead = 0;
bytesRead = handler.EndReceive(ar);
string a = Encoding.Default.GetString(buffers);
content+=Encoding.Default.GetString(buffers);
while(StrFind(content,"|"))
{
Command();
}
Receive();
}
}
catch(Exception)
{
Disconnetti();
}
}
public void Command()
{
string data = content.Substring(0,content.IndexOf("|")+1);
content=content.Substring(data.Length);
if(data!="")
{
DataArrival(Encoding.Default.GetBytes(data));
}
}
public void Receive()
{
try
{
if(rotfl && socket.Connected)
{
StateObject state
= new StateObject
();
buffers
=new byte[socket.
Available];
socket.
BeginReceive(buffers, 0, buffers.
Length, 0,
new AsyncCallback
(ReadCallback
), state
);
}
}
catch (Exception e)
{
Disconnetti();
}
}
public void Connettiti()
{
host = Dns.Resolve(hub);
WriteToRichTextBox("Connessione a "+hub+":"+porta+"...");
try
{
foreach(IPAddress ip in host.AddressList)
{
indirizzoeporta
= new IPEndPoint
(ip, Convert.
ToInt32(porta
));
socket
= new Socket
(AddressFamily.
InterNetwork, SocketType.
Stream, ProtocolType.
Tcp);
socket.Connect(indirizzoeporta);
WriteToRichTextBox("Connesso");
DcUser.SetSocket(socket);
}
}
catch(Exception)
{
WriteToRichTextBox("Connessione in TimeOut");
Disconnetti();
}
Receive();
}
private void SendCallback(IAsyncResult ar)
{
try
{
if(rotfl && socket.Connected)
{
Socket handler = (Socket) ar.AsyncState;
int bytesSent = handler.EndSend(ar);
}
}
catch(Exception)
{
Disconnetti();
}
}
public void Disconnetti()
{
if(rotfl)
{
userlist.Items.Clear();
nomehubz.Text="";
n_user.Text="";
rotfl=false;
userlist.Items.Clear();
WriteToRichTextBox("Disconnesso..");
socket.Close();
}
}
public void Send(string send)
{
if(rotfl && socket.Connected)
{
try
{
byte[] msg = Encoding.Default.GetBytes(send+"|");
socket.
BeginSend(msg,0,msg.
Length,0,
new AsyncCallback
(SendCallback
),socket
);
}
catch(Exception)
{
Disconnetti();
}
}
}
private void manda_Click(object sender, System.EventArgs e)
{
MandaMessMain();
}
private void disconnetti_Click(object sender, System.EventArgs e)
{
Disconnetti();
}
public void DataArrival(byte[] ricevi)
{
try
{
if(rotfl && socket.Connected)
{
string stringric = Encoding.Default.GetString(ricevi);
char[] sep = Encoding.Default.GetChars(Encoding.Default.GetBytes("|"));
string[] data1 = stringric.Split(sep);
foreach(string data in data1)
{
if (data!="")
{
if(data.StartsWith("$UserIP"))
{
char[] s = " ".ToCharArray();
string[] ip = data.Split(s);
WriteToRichTextBox("Ip di "+ip[1]+": "+ip[2]);
}
if(data.StartsWith("$Lock"))
{
string lockepk=data;
char[] sep3 = " ".ToCharArray();
string[] lock0 = lockepk.Split(sep3);
string lockz = lock0[1].ToString();
byte[] keyz = ConvertingLock.getKey(Encoding.Default.GetBytes(lockz));
string key = Encoding.Default.GetString(keyz);
Send("$Key "+key);
Send("$ValidateNick "+DcUser.GetNick());
Send("$Version 1,0091");
Send("$GetNickList");
Send("$MyINFO $ALL "+nick+" "+descr+" "+tag+"$ $"+conn+" $"+mail+"$"+Convert.ToDouble(share)*1024*1024*1024+"$");
}
if(data.StartsWith("<") || data.StartsWith("*"))
{
WriteToRichTextBox(data);
}
if(data.StartsWith("$To:"))
{
char[] s = " ".ToCharArray();
string[] pvt = data.Split(s);
string da=pvt[3];
string mess="";
for(int i = 5;i<pvt.Length;i++)
{
mess+=pvt[i]+" ";
}
if(DcUser.GetPvtUser()==da)
{
string ore = Convert.ToString(DateTime.Now.TimeOfDay);
ore=ore.Substring(0,5);
DcUser.GetRichTextBox().Text+="["+ore+"] <"+da+"> "+mess+"\n";
}
else
{
WriteToRichTextBox("Messaggio Privato da "+da+": "+mess+"\n");
}
}
if(data.StartsWith("$Hello"))
{
string nick = data.Replace("$Hello ","");
if(DcUser.GetPvtUser()==nick)
{
DcUser.GetRichTextBox().Text+="** User "+nick+" riconnesso!\n";
}
userlist.Items.Add(nick);
users.Add(nick);
ops.Add(nick);
lol++;
n_user.Text=lol+"";
}
if(data.StartsWith("$Quit"))
{
string nick = data.Replace("$Quit ","");
if(DcUser.GetPvtUser()==nick)
{
DcUser.GetRichTextBox().Text+="** User "+nick+" sconnesso!\n";
}
userlist.Items.Remove(nick);
users.Remove(nick);
ops.Remove(nick);
lol--;
n_user.Text=lol+"";
}
if(data.StartsWith("$HubName"))
{
string hubname = data.Replace("$HubName ","");
nomehubz.Text = hubname;
}
if(data.StartsWith("$NickList"))
{
string dataz=data.Replace("$NickList ","");
char[] sep2 = Encoding.Default.GetChars(Encoding.Default.GetBytes("$$"));
string[] us = dataz.Split(sep2);
for(int i = 0;i<us.Length;i++)
{
if(us[i]!="")
{
if(!userlist.Items.Contains(us[i]))
{
users.Add(us[i]);
}
}
}
}
if(data.StartsWith("$ValidateDenide"))
{
WriteToRichTextBox("Nick già in uso");
Disconnetti();
}
if(data.StartsWith("$OpList"))
{
string dataz=data.Replace("$OpList ","");
char[] sep2 = Encoding.Default.GetChars(Encoding.Default.GetBytes("$$"));
string[] us = dataz.Split(sep2);
for(int i = 0;i<us.Length;i++)
{
if(us[i]!="")
{
if(!userlist.Items.Contains(us[i]))
{
lol++;
ops.Add(us[i]);
users.Remove(us[i]);
}
}
}
UserList();
}
}
}
}
}
catch(Exception)
{
Disconnetti();
}
}
public void UserList()
{
if(rotfl && socket.Connected)
{
userlist.Items.Clear();
lol=0;
foreach(string a in ops)
{
if(!userlist.Items.Contains(a))
{
lol++;
n_user.Text=lol+"";
userlist.Items.Add(a);
}
}
foreach(string a in users)
{
if(!userlist.Items.Contains(a))
{
lol++;
n_user.Text=lol+"";
userlist.Items.Add(a);
}
}
}
}
private void menuItem1_Click(object sender, System.EventArgs e)
{
if(rotfl && socket.Connected)
{
Pvt p
= new Pvt
(userlist,socket
);
p.Show();
}
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
if(rotfl && socket.Connected)
{
userlist.Items.Clear();
Send("$GetNickList");
}
}
public bool StrFind(string s,string c)
{
s=s.ToLower();
c=c.ToLower();
bool sf=false;
for (int i=0; i<s.Length; i++)
{
if(s.Length>=c.Length && s.Length-i>=c.Length && s.Substring(i,c.Length)==c)
{
sf=true;
}
}
return sf;
}
private void messaggio_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
char ch=e.KeyChar;
if(invio)
{
messaggio.Text="";
invio=false;
}
if (ch==Convert.ToChar("\r"))
{
MandaMessMain();
invio = true;
}
}
public void MandaMessMain()
{
try
{
if(rotfl && socket.Connected)
{
if(invio)
{
messaggio.Text="";
invio=false;
}
if(messaggio.Text!="")
{
Send("<"+nick+"> "+messaggio.Text);
}
else
{
MessageBox.Show("Inserisci un messaggio!","Errore",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
messaggio.Text="";
return;
}
}
catch(Exception)
{
Disconnetti();
}
}
public void WriteToRichTextBox(string s)
{
string ore = Convert.ToString(DateTime.Now.TimeOfDay);
ore=ore.Substring(0,5);
txt.AppendText("["+ore+"] "+s+"\n");
}
private void menuItem15_Click(object sender, System.EventArgs e)
{
Send("$UserIP "+userlist.SelectedItem);
}
}
}