Ilovalar Ilova A. Server ilovasining manba kodining fragmentlari




Download 485,25 Kb.
bet13/15
Sana19.12.2023
Hajmi485,25 Kb.
#124231
1   ...   7   8   9   10   11   12   13   14   15
Bog'liq
UDP protokoli asosida videokonferensiya dasturiy ta\'minotini yaratish

Ilovalar
Ilova A. Server ilovasining manba kodining fragmentlari

    1. Server sinfiga umumiy nuqtai

sinf serveri
{
// server klassi - serverning manzili va portini, ma'lumotlarni qabul qilish uchun rozetkani, asosiy ipni,
// ro'yxatdan o'tgan va faol foydalanuvchilar ro'yxati, ulanishlar ro'yxati
shaxsiy rozetka;
shaxsiy IP-manzil;
xususiy int port;
shaxsiy ipli ip;
xususiy ro'yxat registered_clients;
xususiy ro'yxat active_clients;
xususiy ro'yxat ulanishlar;
LogWriter log_writer;
private void AcceptConnections()
{
esa (to'g'ri)
{
// Qabul qiling birikma

Socket t_socket = socket.Accept();


Ulanish ulanishi = yangi ulanish();
ulanish.Socket = t_socket;
//connection.stream = new NetworkStream(t_socket);
log_writer.Write("Yangi ulanish " +
t_socket.RemoteEndPoint.ToString());
// Ma'lumotlarni qabul qilish uchun mavzu yarating
ulanish.Thread = new Thread(ProcessConnection);
ulanish.Thread.IsBackground = rost;
ulanish.Thread.Start(ulanish);
// Saqlash birikma
qulflash (ulanishlar) ulanishlar.Qo'shish (ulanish);
}
}
xususiy void ProcessConnection (ob'ekt holati)
{
// jarayon iltimos V ulanish
Ulanish ulanishi = (Ulanish) holati;
bayt[] bufer = yangi bayt[255];
harakat qilib ko'ring
{
esa (to'g'ri)
{
// o'qing turi xabarlar
bayt b = NetworkReader.ReadType(connection.Socket);
kalit (b)
{//xabar turiga qarab, tegishli funksiyani chaqiring
case (bayt)Xabarlar.Registratsiya:
{
Ro'yxatdan o'tish (ulanish);
sindirish;
}
case (bayt) Xabarlar. Avtorizatsiya:
{
Avtorizatsiya (ulanish);
sindirish;
}
case (bayt)Messages.ClientInfo:
{
ClientInfo (ulanish);
sindirish;
}
case (bayt)Messages.InfoForClient:
{
RequestToClient(ulanish);
sindirish;
}
Case (bayt) Xabarlar. Ulanishni uzish:
{
DisconnectClient(ulanish);
qaytish;
}
}
}
}
catch (SocketException tashqari)
{
MessageBox.Show(xabardan tashqari);
log_writer.Write("SocketException: " + exc.Message);
}
catch (istisnolar bundan mustasno)
{
MessageBox.Show(xabardan tashqari);
log_writer.Write("Istisno: " + exc.Message);
}
nihoyat
{
DisconnectClient(ulanish);
}
}
Ro'yxatdan o'tishni bekor qilish (Ulanish ulanishi)
{
// ro'yxatdan o'tish yangi foydalanuvchi

ClientRecord rec = NetworkReader.ReadClientRecord (conn.Socket);


ClientInfo info = NetworkReader.ReadClientInfo(conn.Socket);
log_writer.Write("Yangi foydalanuvchini < nomi bilan ro'yxatdan o'tkazish" + rec.Name
+ "> va parol <" + rec.Password + ">");
// serverda shu nomdagi foydalanuvchi ro'yxatdan o'tganligini tekshiring

foreach (registryed_clients-dagi ClientRecord yozuvi)


{
agar (record.Name == rec.Name)
{
// yuborish xabar O muvaffaqiyatsiz ro'yxatdan o'tish

SendMessage(ulanish, Messages.RegistrationFailed);


log_writer.Write("Yangi foydalanuvchini < nomi bilan ro'yxatdan o'tkazish" +
rec.Name + "> va parol <" + rec.Password + "> bajarilmadi");
// ulanishni o'chirish
conn.Socket.Close();
qulflash (ulanishlar) ulanishlar.Remove(conn);
qaytish;
}
}
// aks holda ro'yxatga foydalanuvchi haqidagi ma'lumotlarni qo'shing
registered_clients.Add(rec);
active_clients.Add(rec);
// va muvaffaqiyatli ro'yxatdan o'tish haqida xabar yuboring
SendMessage(conn, Messages.RegistrationSuccess);
log_writer.Write("Yangi foydalanuvchini < nomi bilan ro'yxatdan o'tkazish" + rec.Name +
"> va parol <" + rec.Password + "> muvaffaqiyat");
conn.Name = rec.Name;
// barcha mijozlarga yangi mijoz haqida ma'lumot yuboring
foreach (ulanishdagi c ulanishi)
{
agar (c != conn)
{
SendMessage(c, Messages.ClientConnected);
c.SendClientInfo(ma'lumot);
}
}
}
avtorizatsiyani bekor qilish (ulanish ulanishi)
{
// ruxsat foydalanuvchi
ClientRecord rec = NetworkReader.ReadClientRecord (conn.Socket);
ClientInfo info = NetworkReader.ReadClientInfo(conn.Socket);
log_writer.Write("Yangi foydalanuvchining avtorizatsiyasi <" + rec.Name +
"> va parol <" + rec.Parol + ">");
// shu nomdagi foydalanuvchi onlayn ekanligini tekshiring

foreach (active_clients-dagi ClientRecord yozuvi)


{
agar (record.Equals(rec) == rost)
{
// shu nomdagi foydalanuvchi borligi haqida xabar yuboring
SendMessage(ulanish, Messages.ClientAllredyConnect);
log_writer.Write("Foydalanuvchi nomi <" + rec.Name + "> va parol <" + rec.Password + "> allredy on-line");
// ulanishni o'chirish
conn.Socket.Close();
qulflash (ulanishlar) ulanishlar.Remove(conn);
qaytish;
}
}
// ushbu nomdagi foydalanuvchi ro'yxatdan o'tganligini tekshiring

foreach (registryed_clients-dagi ClientRecord yozuvi)


{
agar (record.Equals(rec) == rost)
{
// ro'yxatdan o'tgan bo'lsa - muvaffaqiyatli avtorizatsiya haqida xabar yuboring
// va foydalanuvchi haqidagi ma'lumotlarni ro'yxatga qo'shing
active_clients.Add(rec);
SendMessage(conn, Messages.AuthorizationSuccess);
log_writer.Write("Yangi foydalanuvchining avtorizatsiyasi <" + rec.Name + "> va parol <" + rec.Password + "> muvaffaqiyat");
conn.Name = rec.Name;

// barcha mijozlarga yangi mijoz haqida ma'lumot yuboring


foreach (ulanishdagi c ulanishi)
{
agar (c != conn)
{
SendMessage(c, Messages.ClientConnected);
c.SendClientInfo(ma'lumot);
}
}
conn.Name = rec.Name;
qaytish;
}
}
// aks holda biz muvaffaqiyatsiz avtorizatsiya haqida xabar yuboramiz
SendMessage(conn, Messages.AuthorizationFailed);
log_writer.Write("Yangi foydalanuvchining avtorizatsiyasi <" + rec.Name +
"> va parol <" + rec.Password + "> bajarilmadi");
conn.Socket.Close();
qulflash (ulanishlar) ulanishlar.Remove(conn);
}
void ClientInfo (Ulanish ulanishi)
{
// mijozga ro'yxatdan o'tgan foydalanuvchilar sonini yuboring
NetworkWriter.WriteType(connection.Socket,
(bayt)(ulanishlar.Count - 1));
log_writer.Write("ulanish.Name + "> ulangan foydalanuvchilar haqida ma'lumot olish uchun");
foreach (Ulanishdagi ulanish)
{
//agar (conn != ulanish)
// har bir ulanish haqida ma'lumot yuboring
//connection.SendClientInfo(conn);
}
}
RequestToClient bekor (Ulanish ulanishi)
{
String nomi = NetworkReader.ReadString(conn.Socket);
bayt turi = NetworkReader.ReadType(conn.Socket);
ClientInfo info = NetworkReader.ReadClientInfo(conn.Socket);
foreach (ulanishdagi c ulanishi)
{
agar (c.Name == nomi)
{
NetworkWriter.WriteType(c.Socket, turi);
NetworkWriter.WriteClientInfo(c.Socket, info);
log_writer.Write("foydalanuvchidan yangi xabar" +
conn.Name + "' foydalanuvchiga '" + c.Name + "'");
sindirish;
}
}
}
void DisconnectClient (Ulanish ulanishi)
{
// otklyuchenie mijoza
// udalyaem polzovatelya iz spiska

foreach (active_clients ichida ClientRecord rec)


{
agar (rec.Name == conn.Name)
{
active_clients.Remove(rec);
log_writer.Write("Ismli foydalanuvchi <" + conn.Name +
"> uzilgan");
sindirish;
}
}
// barcha mijozlarga foydalanuvchining uzilishi haqida xabar yuboring

foreach (ulanishdagi c ulanishi)


{
agar (c != conn)
{
SendMessage(c, Messages.ClientDisconnected);
IPEndPoint ep = yangi IPEndPoint(IPAddress.Loopback, 10000);
ClientInfo info = yangi ClientInfo(conn.Name,
ep.Address.ToString(), ep.Port);
c.SendClientInfo(ma'lumot);
}
}
// o'chirish birikma
conn.Socket.Close();
qulflash (ulanishlar) ulanishlar.Remove(conn);
}
void SendMessage (Ulanish ulanishi, Xabarlar xabarlari)
{
NetworkWriter.WriteType(conn.Socket, (bayt)mes);
}
}


    1. Download 485,25 Kb.
1   ...   7   8   9   10   11   12   13   14   15




Download 485,25 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Ilovalar Ilova A. Server ilovasining manba kodining fragmentlari

Download 485,25 Kb.