|
Udp protokoli asosida videokonferensiya dasturiy ta'minotini yaratish. Mundarija
|
bet | 14/15 | Sana | 19.12.2023 | Hajmi | 485,25 Kb. | | #124231 |
Bog'liq UDP protokoli asosida videokonferensiya dasturiy ta\'minotini yaratishUlanish sinfiga umumiy nuqtai
sinf ulanishi
{
// ulanish klassi - ma'lumotlarni uzatish uchun nom, oqim, rozetka, oqimni o'z ichiga oladi
umumiy string nomi;
umumiy rozetka;
public Thread Thread;
ommaviy bekor SendClientInfo (ClientInfo ma'lumoti)
{
// ulanish ma'lumotlarini yuborish - ism, manzil va port
NetworkWriter.WriteClientInfo(Soket, ma'lumot);
}
public void SendRequest (bayt turi, String manzili, int port)
{
NetworkWriter.WriteType(Soket, tur);
NetworkWriter.WriteClientInfo(Soket,
yangi ClientInfo(Ism, manzil, port));
}
}
LogWriter sinfiga umumiy nuqtai
sinf LogWriter
{
String fayl nomi;
ommaviy LogWriter (String nomi)
{
fayl nomi = nomi;
}
public void Write(String s)
{
StreamWriter wr = yangi StreamWriter(fayl nomi, rost);
wr.WriteLine(DateTime.Now.ToString() + " : " + s + "\n");
wr.Close();
}
}
Ilova B. Mijoz ilovasining manba qismlari
Mijoz sinfiga umumiy nuqtai
sinf mijozi
{
// mijoz klassi - foydalanuvchi nomi va parolni o'z ichiga oladi;
// TCP va UDP rozetkasi, ma'lumotlarni uzatish uchun oqim
String nomi;
String parol;
Soket tcp_socket;
Ip ip;
VideoReceiver qabul qiluvchisi;
VideoSender jo'natuvchisi;
bog'langan_mijozlar ro'yxati;
umumiy ro'yxat ConnectedUsers;
ommaviy EmptyHandler ClientConnectedHandler;
ommaviy EmptyHandler ClientDisconnectedHandler;
ommaviy RequestHandler TransferRequestHandler;
umumiy MessageHandler TransferFailedHandler;
umumiy string nomi
{
get { qaytish nomi; }
set {ism = qiymat; }
}
umumiy string parol
{
olish { parolni qaytarish; }
set { parol = qiymat; }
}
ommaviy mijoz (String host, String n, String p, bool reg,
PictureBox pb, Videodeskriptor tavsifi)
{
// tayinlash original ma'lumotlar
ism = n;
parol = p;
connect_clients = new List();
ConnectedUsers = yangi ro'yxat();
// rozetka yarating va serverga ulaning
tcp_socket = yangi soket (AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
tcp_socket.Connect(host, 11000);
// ishga tushirish jo'natuvchi Va oluvchi video
int port = ((IPEndPoint)tcp_socket.LocalEndPoint).Port - 10000;
IPAddress manzili = ((IPEndPoint)tcp_socket.LocalEndPoint).Manzil;
jo'natuvchi = yangi VideoSender (dec, addr, port);
qabul qiluvchi = yangi VideoReceiver (pb, addr, port + 1);
// avtorizatsiya funktsiyasini chaqiring va mijozlar haqida ma'lumot qo'shing
Avtorizatsiya (reg);
//SetConnectedClients();
// xabarlarni qayta ishlash uchun mavzu yaratish
mavzu = yangi mavzu (ReadMessage);
thread.IsBackground = rost;
thread.Start();
}
avtorizatsiyani bekor qilish (bool registr)
{
// ruxsat
bayt b;
agar (ro'yxatdan o'tish == rost)
b = (bayt)Xabarlar.Registratsiya;
boshqa
b = (bayt) Xabarlar. Avtorizatsiya;
// xabar turi va foydalanuvchi ma'lumotlarini yuborish
NetworkWriter.WriteType(tcp_socket, b);
NetworkWriter.WriteClientRecord(tcp_socket, yangi ClientRecord(nom, parol));
NetworkWriter.WriteClientInfo(tcp_socket, yangi ClientInfo(nomi,
sender.GetEndPoint().Address.ToString(), sender.GetEndPoint().Port));
// Va kutyapmiz javob
b = NetworkReader.ReadType(tcp_socket);
ProcessMessage(b);
}
ReadMessage() bekor qilinadi
{
esa (to'g'ri)
{
// xabar turini o'qing va tegishli amallarni bajaring
bayt b = NetworkReader.ReadType(tcp_socket);
ProcessMessage(b);
}
}
void ProcessMessage (bayt turi)
{
kalit (turi)
{
case (bayt)Messages.RegistrationFailed:
{
throw (yangi Istisno("Ushbu nomli foydalanuvchi allaqachon ro'yxatdan o'tgan"));
}
case (bayt)Xabarlar.RegistratsiyaMuvaffaqiyat:
{
sindirish;
}
case (bayt)Xabarlar.AuthorizationFailed:
{
otish (yangi istisno (" Foydalanuvchi Bilan shunga o'xshash nomi allaqachon Ro'yxatga olingan "));
}
case (bayt)Xabarlar.AuthorizationSuccess:
{
sindirish;
}
case (bayt)Messages.ClientAllredyConnect:
{
tashlash (yangi Istisno(" Polzovatel s shunday imenem uje v seti "));
}
case (bayt)Messages.ClientInfo:
{
ClientInfo();
sindirish;
}
case (bayt)Messages.ClientConnected:
{
NewClientConnected();
sindirish;
}
case (bayt)Messages.ClientDisconnected:
{
ClientDisconnected();
sindirish;
}
case (bayt)Messages.TransferRequest:
{
TransferAnswer();
sindirish;
}
case (bayt)Xabarlar.TransferFailed:
{
TransferFail();
sindirish;
}
case (bayt)Messages.TransferSuccess:
{
BeginVideoTranslation();
sindirish;
}
case (bayt)Messages.TransferEnd:
{
EndVideoTranslation();
sindirish;
}
}
}
bekor NewClientConnected()
{
// ulanish yangi mijoz
// yangi mijoz haqidagi ma'lumotlarni o'qing va uni tegishli ro'yxatlarga qo'shing
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
ConnectedUsers.Add(info.Name);
connect_clients.Add(ma'lumot);
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.InfoForClient);
NetworkWriter.WriteString(tcp_socket, info.Name);
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.ClientInfo);
NetworkWriter.WriteClientInfo(tcp_socket, yangi ClientInfo(nomi,
sender.GetEndPoint().Address.ToString(), sender.GetEndPoint().Port));
// dastur oynasida yangi foydalanuvchini aks ettirish uchun hodisani ko'taring
ClientConnectedHandler();
}
void ClientInfo()
{
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
ConnectedUsers.Add(info.Name);
connect_clients.Add(ma'lumot);
// dastur oynasida yangi foydalanuvchini aks ettirish uchun hodisani ko'taring
ClientConnectedHandler();
}
void ClientDisconnected()
{
// foydalanuvchini uzish
// foydalanuvchi haqidagi ma'lumotlarni o'qing va uni ro'yxatlardan olib tashlang
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
ConnectedUsers.Remove(info.Name);
foreach (connect_clients-dagi ClientInfo ma'lumotlari)
{
agar (inf.Name == info.Name)
{
connect_clients.Remove(ma'lumot);
sindirish;
}
}
// dastur oynasida foydalanuvchilar ro'yxatini yangilash uchun hodisani chaqiring
ClientDisconnectedHandler();
}
Void SetConnectedClients()
{
// bog'langan foydalanuvchilar ro'yxatini olish
List list = new List();
// yuborish iltimos
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.ClientInfo);
// ulangan foydalanuvchilar sonini o'qing
int mijozlar _ soni = ( int ) NetworkReader . ReadType ( tcp_socket ) ; _
// va ularning har biri haqida ma'lumot
uchun (int i = 0; i < clients_count; i++)
{
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
ConnectedUsers.Add(info.Name);
connect_clients.Add(ma'lumot);
}
}
umumiy bekor TransferRequest(String user_name)
{
// otpravlyaem polzovatelyu s imenem user_name zapros na soedinenie
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.InfoForClient);
NetworkWriter.WriteString(tcp_socket, user_name);
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.TransferRequest);
NetworkWriter.WriteClientInfo(tcp_socket, yangi ClientInfo(nomi,
sender.GetEndPoint().Address.ToString(), sender.GetEndPoint().Port));
}
Void TransferAnswer()
{
// foydalanuvchiga javob yuborish
// uning ma'lumotlarini o'qing
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
// chop etish yoqilgan ekran interaktiv oyna
agar (TransferRequestHandler(info.Name) == rost)
// video qo'ng'iroqda foydalanuvchiga rozilik yuborish
NetworkWriter . WriteType ( tcp _ socket , ( bayt ) Xabarlar . InfoForClient );
NetworkWriter.WriteString(tcp_socket, info.Name);
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.TransferSuccess);
NetworkWriter.WriteClientInfo(tcp_socket, yangi ClientInfo(nomi,
qabul qiluvchi.GetEndPoint().Manzil.ToString(), qabul qiluvchi.GetEndPoint().Port));
// rozetkani masofaviy rozetkaga ulang
//receiver.Connect(info.Point);
jo'natuvchi.Connect(ma'lumot.Point);
// va videoni uzatishni boshlang
BeginVideoTranslation1();
}
boshqa
{
// video aloqada rad javobini yuborish
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.InfoForClient);
NetworkWriter.WriteString(tcp_socket, info.Name);
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.TransferFailed);
NetworkWriter.WriteClientInfo(tcp_socket, yangi ClientInfo(nomi,
sender.GetEndPoint().Address.ToString(), sender.GetEndPoint().Port));
}
}
bekor TransferFail()
{
// video qo'ng'iroqni rad etish, ekranda tegishli xabarni ko'rsatadi
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
TransferFailedHandler(info.Name);
}
public void TransferEnd(String user_name)
{
// otpravyalem polzovatelyu soobshchenie o zavershenii videosvyazi
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.InfoForClient);
NetworkWriter.WriteString(tcp_socket, user_name);
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.TransferEnd);
NetworkWriter.WriteClientInfo(tcp_socket, yangi ClientInfo(nomi,
sender.GetEndPoint().Address.ToString(), sender.GetEndPoint().Port));
// Va tugatyapmiz video translyatsiya
EndVideoTranslation1();
}
public void Close()
{
// yuborish xabar O yakunlash ulanishlar
NetworkWriter.WriteType(tcp_socket, (bayt)Messages.Disconnect);
// va rozetkani serverdan uzing
tcp_socket.Disconnect(noto'g'ri);
qabul qiluvchi = null;
jo'natuvchi = null;
}
public void BeginVideoTranslation()
{
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
qabul qiluvchi.Ulanish (ma'lumot.Point);
jo'natuvchi.Connect(ma'lumot.Point);
qabul qiluvchi.BeginReceiving();
sender.BeginSending();
}
Void BeginVideoTranslation1()
{
qabul qiluvchi.BeginReceiving();
sender.BeginSending();
}
public void EndVideoTranslation()
{
ClientInfo info = NetworkReader.ReadClientInfo(tcp_socket);
qabul qiluvchi.EndReceiving();
qabul qiluvchi = null;
sender.EndSending();
jo'natuvchi = null;
}
ommaviy bekor EndVideoTranslation1()
{
qabul qiluvchi.EndReceiving();
qabul qiluvchi = null;
sender.EndSending();
jo'natuvchi = null;
}
}
|
| |