Witam
Mam watek do obsługi klientów w ktory po podaniu prawidlowego loginu i hasla klient zostaje utworzony oddzielny watek i tam jest obslugiwany tylko ze prze probie autoryzacji ,gdy sie wywoluje funkcjachechPass to zawsze mi rzuca bledem takim jak w tytule.
obiekty
MySqlConnection sqlcon = null;
MySqlCommand query = null;
MySqlDataReader reader = null;
sa globalne. Connector nawiozal polanczeni w głównym watku programu. jak sobie z tym poradzic.
Dopiero zaczynam prace na watkach i w c# wiec prosze o jakie takie wytlumaczenie :)
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
listen.Start();
logoperator("Oczekuje na polanczenie");
while (true)
{
klient = listen.AcceptTcpClient();
logoperator("Klient polonczony");
NetworkStream ns = klient.GetStream();
BinaryReader br = new BinaryReader(ns);
string dane = br.ReadString();
logoperator(dane);
string[] cmd = dane.Split(new char[] { ':' });
//
if (cmd[0] == "LOG")
{
BinaryWriter bw = new BinaryWriter(ns);
if (konta.BinarySearch(cmd[1]) > -1)
{
if (chechPass(cmd[1], cmd[2]))
{
bw.Write("LOGOK");
BackgroundWorker watek = new BackgroundWorker();
watek.WorkerSupportsCancellation = true;
watek.DoWork += new DoWorkEventHandler(watek_DoWork);
nazwaKlientow.Add(cmd[1]);
listaKlientow.Add(watek);
watek.RunWorkerAsync();
}
else
{
logoperator("Blad autoryzacji:" + cmd[1]);
}
}
else
{
logoperator("Brak uzytkownika");
}
}
}
}
catch
{
listen.Stop();
logoperator("Server stop");
}
funkcja checkpass
private bool chechPass(string login,string pass)
{
string dbpass = null;
query = sqlcon.CreateCommand();
query.CommandText = "SELECT passwd FROM account WHERE nr=" + login + ";";
try
{
reader = query.ExecuteReader();
reader.Read();
//dbpass = reader.GetString(0);
logoperator(dbpass);
}
catch(MySqlException e)
{
logoperator(e.ToString());
}
if (dbpass == pass)
return true;
else
return false;
}