Skip to content
Snippets Groups Projects
Commit 25caec40 authored by OPALVENS Florence's avatar OPALVENS Florence
Browse files

annuaire

parent 6b5b4e3b
Branches
Tags
No related merge requests found
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClientUdp;
using System.Threading;
namespace ServeurUdp
{
class Annuaire
{
const int MsgsBufferSize = 100000000;
string messages = String.Empty;
static Dictionary<int, string> rooms = new Dictionary<int, string>();
static List<EndPoint> servers = new List<EndPoint>();
public static void Main(string[] args)
{
try
{
// ************************************************************** Initialisation
int portAnnuaire = 17020;
string ipAnnuaire = "127.0.0.1";
// Création de la socket d'écoute UDP / socket pour chaque chat room
Socket annuaire = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
// Liaison de la socket au point de communication
annuaire.Bind(new IPEndPoint(IPAddress.Parse(ipAnnuaire), portAnnuaire));
EndPoint serverChatEP = new IPEndPoint(IPAddress.Any, 0);
byte[] buffer = new byte[ChatMessage.bufferSize];
annuaire.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref serverChatEP);
ChatMessage msg = new ChatMessage(buffer);
switch (msg.commande)
{
//ajout du serveur et de la room créé
case Commande.SIGNALER:
rooms.Add(int.Parse(msg.pseudo), msg.data);
if (!servers.Contains(serverChatEP))
{
servers.Add(serverChatEP);
}
break;
//envoie des serveurs
case Commande.LISTSERVEURS:
byte[] buf = System.Text.Encoding.ASCII.GetBytes(servers.ToString());
annuaire.SendTo(buf, 0, buf.Length, SocketFlags.None, serverChatEP);
break;
//envoie des rooms
case Commande.LISTROOMS:
byte[] buff = System.Text.Encoding.ASCII.GetBytes(rooms.ToString());
annuaire.SendTo(buffer, 0, buff.Length, SocketFlags.None, serverChatEP);
break;
}
//************************************************************** Communications
// Fermeture socket
Console.WriteLine("Fermeture Socket...");
annuaire.Close();
//************************************************************** Conclusion
}
catch (SocketException E)
{
Console.WriteLine(E.Message);
Console.ReadKey();
}
Console.ReadKey();
}
}
}
......@@ -19,15 +19,14 @@ namespace ServeurUdp
List<EndPoint> subscribers = new List<EndPoint>();
List<EndPoint> alreadyConnectedRoom = new List<EndPoint>();
string nameRoom = string.Empty;
static Dictionary<int, string> rooms = new Dictionary<int, string>();
static int numPort = 17021;
static bool display = false;
static bool insert = false;
EndPoint annuaire = new IPEndPoint(IPAddress.Parse(ipAnnuaire), portAnnuaire);
//éléments de base pour implémenter l'annuaire
List<string> servers = new List<string>();//List<EndPoint> servers = new List<EndPoint>(); ==> A REMPLACER par ce qu'il y a en comm mais prob de cast !!!!!!!!
static int portAnnuaire = 17020;
static string ipAnnuaire = "127.0.0.1";
static EndPoint annuaire;
void sendMsgs(Socket serverSocket, EndPoint clientEP)
{
......@@ -47,7 +46,7 @@ namespace ServeurUdp
}
//envoi de toutes les rooms enregistrées sur le serveur
void sendRooms(Socket serverSocket, EndPoint clientEP)
void sendRooms(Socket serverSocket, EndPoint clientEP, Dictionary<int,string> rooms)
{
//pas de room enregistrée sur le serveur
if(rooms.Count == 0)
......@@ -68,7 +67,7 @@ namespace ServeurUdp
Console.WriteLine("Liste des rooms envoyée !");
}
void sendServers(Socket serverSocket, EndPoint clientEP)
void sendServers(Socket serverSocket, EndPoint clientEP, List<EndPoint> servers)
{
if(servers.Count == 0)
{
......@@ -130,8 +129,7 @@ namespace ServeurUdp
//création de la nouvelle socket pour la chat room
numPort++;
string[] args = { numPort.ToString() };//envoi du numéro de port pour la chat room (sera à chaque fois incrémenté)
//Console.WriteLine(args[0]);
//création et lancement du Thread qui contiendra le MainServer
Thread chatServerThread = new System.Threading.Thread(() => chatServer.MainServer(args));
chatServerThread.Start();
......@@ -158,17 +156,21 @@ namespace ServeurUdp
// Liaison de la socket au point de communication
int num_port = int.Parse(args[0].ToString());//on récupère le numéro de port qui a été incrémenté dans la fonction createChat
serverSocket.Bind(new IPEndPoint(IPAddress.Any, num_port));
//envoi de la requête signaler à l'annuaire dès qu'on crée un serveur de chat
ChatMessage get_signal = new ChatMessage(Commande.SIGNALER, CommandeType.REQUETE, nameRoom, "");
byte[] bufferGetSignal = get_signal.GetBytes();
annuaire = new IPEndPoint(IPAddress.Parse(ipAnnuaire), portAnnuaire);//on envoit à l'annuaire via son adressIP et son numéro de port 17020
serverSocket.SendTo(bufferGetSignal, 0, bufferGetSignal.Length, SocketFlags.None, annuaire);//on envoie à l'annuaire pour qu'il stocke le serveur dans sa liste
if (!insert)//on enregistre pas le tout premier serveur lancé
{
insert = true;
}
else
{
//envoi de la requête signaler à l'annuaire dès qu'on crée un serveur de chat
ChatMessage get_signal = new ChatMessage(Commande.SIGNALER, CommandeType.REQUETE, nameRoom, num_port.ToString());
byte[] bufferGetSignal = get_signal.GetBytes();
serverSocket.SendTo(bufferGetSignal, 0, bufferGetSignal.Length, SocketFlags.None, annuaire);//on envoie à l'annuaire pour qu'il stocke le serveur et la room dans sa liste
}
bool continuer = true;
//************************************************************** Communications
......@@ -249,26 +251,46 @@ namespace ServeurUdp
//on réenvoie le numéro de port de la chat room pour qu'on puisse connecter le client à celle-ci (permettra aussi les tests de créer une room dans une room)
byte[] buf = Encoding.ASCII.GetBytes(numPort.ToString());
Console.WriteLine(numPort.ToString());
serverSocket.SendTo(buf, 0, buf.Length, SocketFlags.None, clientEP);
rooms.Add(numPort, msg.data);//ajout de la room dans la liste du chat serveur
// servers.Add(server);//ajout du serveur de chat à la liste des serveurs
break;
case Commande.LISTROOMS: // retourne toutes les rooms créées
Console.WriteLine("Demande de lister les rooms...");
//envoi des rooms et leur numéro de port
sendRooms(serverSocket, clientEP);
//envoie demande à l'annuaire
ChatMessage get_rooms = new ChatMessage(Commande.LISTROOMS, CommandeType.REQUETE, "", "");
byte[] bufferGetRooms = get_rooms.GetBytes();
serverSocket.SendTo(bufferGetRooms, 0, bufferGetRooms.Length, SocketFlags.None, annuaire);
//réception des rooms
EndPoint annuairee = new IPEndPoint(IPAddress.Any, 0);
byte[] buff = new byte[ChatMessage.bufferSize];
int nBytes = serverSocket.ReceiveFrom(buff, buff.Length, SocketFlags.None, ref annuairee);
Dictionary<int, string> rooms = Encoding.ASCII.GetString(buff, 0, nBytes);
//envoie au client
sendRooms(serverSocket, clientEP, rooms);
break;
//on va rechercher dans l'annuaire
case Commande.LISTSERVEURS:
Console.WriteLine("Demande de lister les serveurs...");
Console.WriteLine("Envoi des serveurs");
sendServers(serverSocket, clientEP);
//envoie demande à l'annuaire
ChatMessage get_servers = new ChatMessage(Commande.LISTSERVEURS, CommandeType.REQUETE, "", "");
byte[] bufferGetServers = get_servers.GetBytes();
serverSocket.SendTo(bufferGetServers, 0, bufferGetServers.Length, SocketFlags.None, annuaire);
//réception des rooms
EndPoint annu = new IPEndPoint(IPAddress.Any, 0);
byte[] buf_annuaire = new byte[ChatMessage.bufferSize];
int nbBytes = serverSocket.ReceiveFrom(buf_annuaire, buf_annuaire.Length, SocketFlags.None, ref annu);
List<EndPoint> servers = Encoding.ASCII.GetString(buf_annuaire, 0, nbBytes);
//envoie au client
sendServers(serverSocket, clientEP, servers);
break;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment