Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Net;
- using System.Net.Sockets;
- using ClassMessage;
- using System.IO;
- namespace NSUserConnected
- {
- public class ChatClient
- {
- private UserUI ConnectedUserUI {get; set; }
- private int PortIP;
- private IPAddress ServerIP;
- public TcpClient Client;
- public NetworkStream ClientNS;
- public int IdUser;
- public List<String> names = new List<string>();
- /// <summary>
- /// Afegeix un nou usuari al xat
- /// </summary>
- /// <param name="userName">Nom d'usuari</param>
- public void JoinUserClient(string userName)
- {
- //Creem un nou controlador per la gestió del UserPanel
- this.ConnectedUserUI = new UserUI(userName, new UserPanel());
- //Creem i mostrem un nou panell
- //Creamos y mostramos un nuevo panel
- ConnectedUserUI.CreatePanel();
- ConnectedUserUI.ShowPanel();
- //Connexió amb el servidor
- //Conexión con el servidor
- PortIP = 50000;
- ServerIP = IPAddress.Parse("127.0.0.1");
- IPEndPoint ServerEndPoint = new IPEndPoint(ServerIP, PortIP);
- Client = new TcpClient();
- Client.Connect(ServerEndPoint);
- if (Client.Connected)
- Console.WriteLine("Client connectat!");
- //Enviament del nom d'usuari al servidor
- //Enviamos el nombre del usuario al servidor
- byte[] nomUser;
- //Passem el nom usuari a bytes
- //Pasamos el nombre de usuario a bytes
- nomUser = Encoding.Unicode.GetBytes(userName);
- //Obtenim l'Stream d'intercanvi de dades
- //Obtenemos el Stream de intercavio de datos
- ClientNS = Client.GetStream();
- //Enviem al server
- //Enviamos al servidor
- ClientNS.Write(nomUser, 0, nomUser.Length);
- //Actualitzar informació panell amb Nom Usuari (ID: idUsuari)
- //Actualizamos la información del panel con el nombre del usuario
- ConnectedUserUI.Panel.Title = ConnectedUserUI.UserName;
- names.Add(userName);
- //Iniciar fil d'escola per rebre els missatges dels altres usuaris
- //Iniciamos hilo de esculla para recibir los mensajes de los otros usuarios
- Thread tEscola = new Thread(GetMessageOtherUsers);
- tEscola.Start();
- }
- /// <summary>
- /// Mètode que envia el servidor un missatge i destinatari
- /// </summary>
- /// <param name="missatge"></param>
- /// <param name="destinatari"></param>
- public void SendMessageToServer(string missatge, string destinatari)
- {
- string name;
- name = names.ToString();
- //Creem una nova instància de la classe Message
- //Creamos una neuva instancia de la clase Message
- Message msgUser = new Message(name, destinatari, missatge);
- //Serialitzem el missatge
- //Serializamos el mensaje
- byte[] msg = Message.SerializeMessage(msgUser);
- //L'enviem al servidor
- //Enviamos al servidor
- ClientNS.Write(msg, 0, msg.Length);
- //Mostrem el missatge per pantalla
- //Mostramos mensaje por pantalla
- ConnectedUserUI.ShowMessage(msgUser);
- }
- //Metodo para recibir mensajes de otros usuarios
- public void GetMessageOtherUsers(object ClientNS)
- {
- NetworkStream clientNS = (NetworkStream)ClientNS;
- //Recibimos datos del serivdor
- byte[] BufferLocal = new byte[256];
- int BytesRebuts = clientNS.Read(BufferLocal, 0, BufferLocal.Length);
- while (true)
- {
- //Recibimos datos del serivdor
- BufferLocal = new byte[256];
- BytesRebuts = clientNS.Read(BufferLocal, 0, BufferLocal.Length);
- Message msg = (Message)Message.Deserialize(BufferLocal);
- }
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- using System.Net.Sockets;
- using System.Net;
- using System.IO;
- using NSUserConnected;
- using ClassMessage;
- namespace server
- {
- class Program
- {
- private static List<UserConnected> ConnectedUsers = new List<UserConnected>();
- private static int PortIP { get; set; }
- private static IPAddress ServerIP { get; set; }
- //public static NetworkStream ServerNS;
- public static void Main ()
- {
- //Crear i engegar el servidor
- //Crear y encender el servidor
- PortIP = 50000;
- ServerIP = IPAddress.Parse("127.0.0.1");
- IPEndPoint MyIPEndPoint = new IPEndPoint(ServerIP, PortIP);
- TcpListener Server = new TcpListener(MyIPEndPoint);
- Console.WriteLine("Servidor creat");
- Server.Start();
- Console.WriteLine("Servidor iniciat");
- //Bucle d'acceptació de clients, generant el fil corresponent per cada client
- //Bucle de acceptación de clientes, generamos el hilo correspondiente para cada cliente.
- while (true)
- {
- TcpClient Client = Server.AcceptTcpClient();
- Console.WriteLine("Client connectat");
- Thread tClient = new Thread(ProcessaClient);
- tClient.Start(Client);
- }
- }
- public static void ProcessaClient(object client)
- {
- //Rebre nom d'usuari (aquell amb el que l'usuari es connecti al xat)
- //Recibimos el nombre del usuario(aquel con el que el usuario se conecte al xat)
- int BytesRebuts;
- byte[] BufferLocal = new byte[256];
- string nomU;
- string nomD = "";
- string textMsg = "";
- Message msg;
- TcpClient tcpClient = (TcpClient)client;
- NetworkStream ServerNS = tcpClient.GetStream();
- ServerNS = tcpClient.GetStream();
- MemoryStream BufferAllData = new MemoryStream();
- BytesRebuts = ServerNS.Read(BufferLocal, 0, BufferLocal.Length);
- BufferAllData.Write(BufferLocal, 0, BufferLocal.Length);
- /*
- while (ServerNS.DataAvailable) //Mentre hi hagi dades disponibles al NetworkStream
- {
- BytesRebuts += ServerNS.Read(BufferLocal, 0, BufferLocal.Length); //Tornem a llegir del NetworkStream
- BufferAllData.Write(BufferLocal, 0, BufferLocal.Length); //Acumulem la informació al MemoryStream.
- }
- */
- nomU = System.Text.Encoding.Unicode.GetString(BufferAllData.ToArray(), 0, BytesRebuts);
- Console.WriteLine("Nom usuari: {0}", nomU);
- Console.WriteLine("Nom usuari rebut!");
- try
- {
- //Crear un nou UserConnected, actualitzarlo amb les dades corresponents i afegir-lo a la llista d'usuaris connectats al xat.
- //Creamos un nuevo UserConnected, actualitzalo con los datos correspondientes y agregarlo a la lista de usuarios conectados al chat.
- UserConnected userCon = new UserConnected(nomU, ServerNS);
- ConnectedUsers.Add(userCon);
- while (true)
- {
- //Rebre un missatge
- //Recibimos el mensaje
- byte[] BuffererMsg = new byte[256];
- int ByteRebutsMsg = ServerNS.Read(BuffererMsg, 0, BuffererMsg.Length);
- msg = (Message)Message.Deserialize(BuffererMsg);
- //Enviem el missatge al seu destinatari
- //Enviamos el mensaje a su destinatario
- //Passem de string a bytes
- //Pasamos de string a bytes
- byte[] destMsg = Message.SerializeMessage(msg);
- for (int i = 0; i < ConnectedUsers.Count; i++)
- {
- ConnectedUsers[i].NS.Write(destMsg, 0, destMsg.Length);
- }
- }
- }
- catch (System.IO.IOException e)
- {
- Console.WriteLine("Client desconnectat");
- }
- finally
- {
- ServerNS.Close();
- tcpClient.Close();
- }
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Runtime.Serialization;
- using System.IO;
- namespace ClassMessage
- {
- [Serializable]
- public class Message
- {
- public string Sender { get; set; }
- public string Receiver { get; set; }
- public string TextMessage { get; set; }
- public Message(string auxSender, string auxReceiver, string auxTextMessage)
- {
- Sender = auxSender;
- Receiver = auxReceiver;
- TextMessage = auxTextMessage;
- }
- public static byte[] SerializeMessage (object obj)
- {
- byte[] bytesPos;
- BinaryFormatter bf = new BinaryFormatter();
- using (MemoryStream ms = new MemoryStream())
- {
- bf.Serialize(ms, obj);
- bytesPos = ms.ToArray();
- }
- return bytesPos;
- }
- public static Message Deserialize(byte[] param)
- {
- Message objMessage = null;
- using (MemoryStream ms = new MemoryStream(param))
- {
- IFormatter br = new BinaryFormatter();
- objMessage = (br.Deserialize(ms) as Message);
- }
- return objMessage;
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Diagnostics;
- namespace simulador
- {
- class Program
- {
- static void Main(string[] args)
- {
- Process C1 = new Process();
- Process C2 = new Process();
- //Process C3 = new Process();
- C1.StartInfo.FileName = @"C:\clientclientbinDebugclient.exe";
- C1.Start();
- /*
- C2.StartInfo.FileName = @"C:\clientclientbinDebugclient.exe";
- C2.Start();
- C3.StartInfo.FileName = @"C:\clientclientbinDebugclient.exe";
- C4.Start();
- */
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Controls;
- using System.Net.Sockets;
- using System.Windows.Threading;
- using ClassMessage;
- namespace NSUserConnected
- {
- public class UserUI
- {
- public string UserName { get; set; }
- //Això representa la vista pel panell d'usuari
- public UserPanel Panel { get; set; }
- //Constructor
- public UserUI(string userName, UserPanel userPanel)
- {
- this.UserName = userName;
- this.Panel = userPanel;
- }
- //Actualitza dades del panell
- public void CreatePanel()
- {
- this.Panel.Name = this.UserName;
- this.Panel.Title = this.UserName + " panel";
- }
- /// <summary>
- /// Mostra el panell en pantalla
- /// </summary>
- public void ShowPanel()
- {
- this.Panel.Show();
- }
- /// <summary>
- /// Afegeix un missatge al contenidor de missatges
- /// </summary>
- /// <param name="message">El missatge que es vol mostrar al panell</param>
- /// <param name="issuer">L'emissor del missatge</param>
- public void ShowMessage(Message message)
- {
- Panel.Dispatcher.Invoke(() =>
- {
- Label LabelMsg = new Label();
- if (message.Sender.Equals(this.UserName))
- {
- LabelMsg.Content = "You says: " + message.TextMessage;
- }
- else
- {
- LabelMsg.Content = message.Sender + " says: " + message.TextMessage;
- }
- this.Panel.StackPanelConversation.Children.Add(LabelMsg);
- }
- );
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Shapes;
- namespace NSUserConnected
- {
- /// <summary>
- /// Lógica de interacción para login.xaml
- /// </summary>
- public partial class login : Window
- {
- public login()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- (Application.Current as App).myChat.JoinUserClient(TextBoxName.Text);
- this.Close();
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Shapes;
- namespace NSUserConnected
- {
- /// <summary>
- /// Lógica de interacción para UserPanel.xaml
- /// </summary>
- public partial class UserPanel : Window
- {
- public UserPanel()
- {
- InitializeComponent();
- }
- private void ButtonSendMsg_Click(object sender, RoutedEventArgs e)
- {
- //Aquest és un dels mètodes de la classe ChatClient que haureu de programar
- (Application.Current as App).myChat.SendMessageToServer(TextBoxMsg.Text, TextBoxDest.Text);
- }
- }
- }
Add Comment
Please, Sign In to add comment