Guest User

Untitled

a guest
Jun 18th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.01 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using System.Net;
  8. using System.Net.Sockets;
  9. using ClassMessage;
  10. using System.IO;
  11.  
  12. namespace NSUserConnected
  13. {
  14. public class ChatClient
  15. {
  16. private UserUI ConnectedUserUI {get; set; }
  17. private int PortIP;
  18. private IPAddress ServerIP;
  19. public TcpClient Client;
  20. public NetworkStream ClientNS;
  21. public int IdUser;
  22. public List<String> names = new List<string>();
  23. /// <summary>
  24. /// Afegeix un nou usuari al xat
  25. /// </summary>
  26. /// <param name="userName">Nom d'usuari</param>
  27. public void JoinUserClient(string userName)
  28. {
  29. //Creem un nou controlador per la gestió del UserPanel
  30. this.ConnectedUserUI = new UserUI(userName, new UserPanel());
  31.  
  32. //Creem i mostrem un nou panell
  33. //Creamos y mostramos un nuevo panel
  34. ConnectedUserUI.CreatePanel();
  35. ConnectedUserUI.ShowPanel();
  36.  
  37. //Connexió amb el servidor
  38. //Conexión con el servidor
  39. PortIP = 50000;
  40. ServerIP = IPAddress.Parse("127.0.0.1");
  41. IPEndPoint ServerEndPoint = new IPEndPoint(ServerIP, PortIP);
  42.  
  43. Client = new TcpClient();
  44. Client.Connect(ServerEndPoint);
  45.  
  46. if (Client.Connected)
  47. Console.WriteLine("Client connectat!");
  48. //Enviament del nom d'usuari al servidor
  49. //Enviamos el nombre del usuario al servidor
  50. byte[] nomUser;
  51.  
  52. //Passem el nom usuari a bytes
  53. //Pasamos el nombre de usuario a bytes
  54. nomUser = Encoding.Unicode.GetBytes(userName);
  55.  
  56. //Obtenim l'Stream d'intercanvi de dades
  57. //Obtenemos el Stream de intercavio de datos
  58. ClientNS = Client.GetStream();
  59.  
  60. //Enviem al server
  61. //Enviamos al servidor
  62. ClientNS.Write(nomUser, 0, nomUser.Length);
  63.  
  64. //Actualitzar informació panell amb Nom Usuari (ID: idUsuari)
  65. //Actualizamos la información del panel con el nombre del usuario
  66. ConnectedUserUI.Panel.Title = ConnectedUserUI.UserName;
  67.  
  68. names.Add(userName);
  69.  
  70.  
  71. //Iniciar fil d'escola per rebre els missatges dels altres usuaris
  72. //Iniciamos hilo de esculla para recibir los mensajes de los otros usuarios
  73. Thread tEscola = new Thread(GetMessageOtherUsers);
  74. tEscola.Start();
  75. }
  76.  
  77.  
  78. /// <summary>
  79. /// Mètode que envia el servidor un missatge i destinatari
  80. /// </summary>
  81. /// <param name="missatge"></param>
  82. /// <param name="destinatari"></param>
  83. public void SendMessageToServer(string missatge, string destinatari)
  84. {
  85. string name;
  86. name = names.ToString();
  87. //Creem una nova instància de la classe Message
  88. //Creamos una neuva instancia de la clase Message
  89. Message msgUser = new Message(name, destinatari, missatge);
  90.  
  91. //Serialitzem el missatge
  92. //Serializamos el mensaje
  93. byte[] msg = Message.SerializeMessage(msgUser);
  94.  
  95. //L'enviem al servidor
  96. //Enviamos al servidor
  97. ClientNS.Write(msg, 0, msg.Length);
  98.  
  99. //Mostrem el missatge per pantalla
  100. //Mostramos mensaje por pantalla
  101. ConnectedUserUI.ShowMessage(msgUser);
  102.  
  103. }
  104.  
  105. //Metodo para recibir mensajes de otros usuarios
  106. public void GetMessageOtherUsers(object ClientNS)
  107. {
  108. NetworkStream clientNS = (NetworkStream)ClientNS;
  109.  
  110. //Recibimos datos del serivdor
  111. byte[] BufferLocal = new byte[256];
  112. int BytesRebuts = clientNS.Read(BufferLocal, 0, BufferLocal.Length);
  113. while (true)
  114. {
  115. //Recibimos datos del serivdor
  116. BufferLocal = new byte[256];
  117. BytesRebuts = clientNS.Read(BufferLocal, 0, BufferLocal.Length);
  118.  
  119. Message msg = (Message)Message.Deserialize(BufferLocal);
  120.  
  121. }
  122.  
  123. }
  124. }
  125. }
  126.  
  127. using System;
  128. using System.Collections.Generic;
  129. using System.Linq;
  130. using System.Text;
  131. using System.Threading.Tasks;
  132. using System.Threading;
  133. using System.Net.Sockets;
  134. using System.Net;
  135. using System.IO;
  136. using NSUserConnected;
  137. using ClassMessage;
  138.  
  139. namespace server
  140. {
  141.  
  142. class Program
  143. {
  144. private static List<UserConnected> ConnectedUsers = new List<UserConnected>();
  145. private static int PortIP { get; set; }
  146. private static IPAddress ServerIP { get; set; }
  147. //public static NetworkStream ServerNS;
  148. public static void Main ()
  149. {
  150. //Crear i engegar el servidor
  151. //Crear y encender el servidor
  152. PortIP = 50000;
  153. ServerIP = IPAddress.Parse("127.0.0.1");
  154. IPEndPoint MyIPEndPoint = new IPEndPoint(ServerIP, PortIP);
  155.  
  156. TcpListener Server = new TcpListener(MyIPEndPoint);
  157.  
  158. Console.WriteLine("Servidor creat");
  159. Server.Start();
  160. Console.WriteLine("Servidor iniciat");
  161.  
  162. //Bucle d'acceptació de clients, generant el fil corresponent per cada client
  163. //Bucle de acceptación de clientes, generamos el hilo correspondiente para cada cliente.
  164. while (true)
  165. {
  166. TcpClient Client = Server.AcceptTcpClient();
  167. Console.WriteLine("Client connectat");
  168. Thread tClient = new Thread(ProcessaClient);
  169. tClient.Start(Client);
  170. }
  171.  
  172. }
  173.  
  174. public static void ProcessaClient(object client)
  175. {
  176.  
  177. //Rebre nom d'usuari (aquell amb el que l'usuari es connecti al xat)
  178. //Recibimos el nombre del usuario(aquel con el que el usuario se conecte al xat)
  179.  
  180. int BytesRebuts;
  181. byte[] BufferLocal = new byte[256];
  182. string nomU;
  183. string nomD = "";
  184. string textMsg = "";
  185. Message msg;
  186. TcpClient tcpClient = (TcpClient)client;
  187. NetworkStream ServerNS = tcpClient.GetStream();
  188.  
  189. ServerNS = tcpClient.GetStream();
  190. MemoryStream BufferAllData = new MemoryStream();
  191.  
  192. BytesRebuts = ServerNS.Read(BufferLocal, 0, BufferLocal.Length);
  193.  
  194. BufferAllData.Write(BufferLocal, 0, BufferLocal.Length);
  195.  
  196. /*
  197. while (ServerNS.DataAvailable) //Mentre hi hagi dades disponibles al NetworkStream
  198. {
  199. BytesRebuts += ServerNS.Read(BufferLocal, 0, BufferLocal.Length); //Tornem a llegir del NetworkStream
  200. BufferAllData.Write(BufferLocal, 0, BufferLocal.Length); //Acumulem la informació al MemoryStream.
  201. }
  202. */
  203. nomU = System.Text.Encoding.Unicode.GetString(BufferAllData.ToArray(), 0, BytesRebuts);
  204. Console.WriteLine("Nom usuari: {0}", nomU);
  205. Console.WriteLine("Nom usuari rebut!");
  206.  
  207. try
  208. {
  209. //Crear un nou UserConnected, actualitzarlo amb les dades corresponents i afegir-lo a la llista d'usuaris connectats al xat.
  210. //Creamos un nuevo UserConnected, actualitzalo con los datos correspondientes y agregarlo a la lista de usuarios conectados al chat.
  211. UserConnected userCon = new UserConnected(nomU, ServerNS);
  212.  
  213. ConnectedUsers.Add(userCon);
  214.  
  215.  
  216. while (true)
  217. {
  218. //Rebre un missatge
  219. //Recibimos el mensaje
  220. byte[] BuffererMsg = new byte[256];
  221. int ByteRebutsMsg = ServerNS.Read(BuffererMsg, 0, BuffererMsg.Length);
  222. msg = (Message)Message.Deserialize(BuffererMsg);
  223.  
  224. //Enviem el missatge al seu destinatari
  225. //Enviamos el mensaje a su destinatario
  226. //Passem de string a bytes
  227. //Pasamos de string a bytes
  228. byte[] destMsg = Message.SerializeMessage(msg);
  229. for (int i = 0; i < ConnectedUsers.Count; i++)
  230. {
  231. ConnectedUsers[i].NS.Write(destMsg, 0, destMsg.Length);
  232. }
  233. }
  234. }
  235. catch (System.IO.IOException e)
  236. {
  237. Console.WriteLine("Client desconnectat");
  238. }
  239. finally
  240. {
  241. ServerNS.Close();
  242. tcpClient.Close();
  243. }
  244. }
  245.  
  246. }
  247. }
  248.  
  249. using System;
  250. using System.Collections.Generic;
  251. using System.Linq;
  252. using System.Text;
  253. using System.Threading.Tasks;
  254. using System.Runtime.Serialization.Formatters.Binary;
  255. using System.Runtime.Serialization;
  256. using System.IO;
  257.  
  258. namespace ClassMessage
  259. {
  260. [Serializable]
  261. public class Message
  262. {
  263. public string Sender { get; set; }
  264. public string Receiver { get; set; }
  265. public string TextMessage { get; set; }
  266.  
  267. public Message(string auxSender, string auxReceiver, string auxTextMessage)
  268. {
  269. Sender = auxSender;
  270. Receiver = auxReceiver;
  271. TextMessage = auxTextMessage;
  272. }
  273.  
  274. public static byte[] SerializeMessage (object obj)
  275. {
  276. byte[] bytesPos;
  277. BinaryFormatter bf = new BinaryFormatter();
  278. using (MemoryStream ms = new MemoryStream())
  279. {
  280. bf.Serialize(ms, obj);
  281. bytesPos = ms.ToArray();
  282. }
  283.  
  284. return bytesPos;
  285. }
  286.  
  287. public static Message Deserialize(byte[] param)
  288. {
  289. Message objMessage = null;
  290. using (MemoryStream ms = new MemoryStream(param))
  291. {
  292. IFormatter br = new BinaryFormatter();
  293. objMessage = (br.Deserialize(ms) as Message);
  294. }
  295.  
  296. return objMessage;
  297. }
  298. }
  299. }
  300.  
  301. using System;
  302. using System.Collections.Generic;
  303. using System.Linq;
  304. using System.Text;
  305. using System.Threading.Tasks;
  306. using System.Diagnostics;
  307.  
  308. namespace simulador
  309. {
  310. class Program
  311. {
  312. static void Main(string[] args)
  313. {
  314. Process C1 = new Process();
  315. Process C2 = new Process();
  316. //Process C3 = new Process();
  317.  
  318. C1.StartInfo.FileName = @"C:\clientclientbinDebugclient.exe";
  319. C1.Start();
  320. /*
  321. C2.StartInfo.FileName = @"C:\clientclientbinDebugclient.exe";
  322. C2.Start();
  323. C3.StartInfo.FileName = @"C:\clientclientbinDebugclient.exe";
  324. C4.Start();
  325. */
  326. }
  327. }
  328. }
  329.  
  330. using System;
  331. using System.Collections.Generic;
  332. using System.Linq;
  333. using System.Text;
  334. using System.Threading.Tasks;
  335. using System.Windows.Controls;
  336. using System.Net.Sockets;
  337. using System.Windows.Threading;
  338. using ClassMessage;
  339.  
  340. namespace NSUserConnected
  341. {
  342. public class UserUI
  343. {
  344. public string UserName { get; set; }
  345. //Això representa la vista pel panell d'usuari
  346. public UserPanel Panel { get; set; }
  347.  
  348. //Constructor
  349. public UserUI(string userName, UserPanel userPanel)
  350. {
  351. this.UserName = userName;
  352. this.Panel = userPanel;
  353. }
  354.  
  355. //Actualitza dades del panell
  356. public void CreatePanel()
  357. {
  358. this.Panel.Name = this.UserName;
  359. this.Panel.Title = this.UserName + " panel";
  360. }
  361.  
  362. /// <summary>
  363. /// Mostra el panell en pantalla
  364. /// </summary>
  365. public void ShowPanel()
  366. {
  367. this.Panel.Show();
  368. }
  369.  
  370. /// <summary>
  371. /// Afegeix un missatge al contenidor de missatges
  372. /// </summary>
  373. /// <param name="message">El missatge que es vol mostrar al panell</param>
  374. /// <param name="issuer">L'emissor del missatge</param>
  375. public void ShowMessage(Message message)
  376. {
  377. Panel.Dispatcher.Invoke(() =>
  378. {
  379. Label LabelMsg = new Label();
  380.  
  381. if (message.Sender.Equals(this.UserName))
  382. {
  383. LabelMsg.Content = "You says: " + message.TextMessage;
  384. }
  385. else
  386. {
  387. LabelMsg.Content = message.Sender + " says: " + message.TextMessage;
  388. }
  389. this.Panel.StackPanelConversation.Children.Add(LabelMsg);
  390. }
  391. );
  392. }
  393. }
  394. }
  395.  
  396. using System;
  397. using System.Collections.Generic;
  398. using System.Linq;
  399. using System.Text;
  400. using System.Threading.Tasks;
  401. using System.Windows;
  402. using System.Windows.Controls;
  403. using System.Windows.Data;
  404. using System.Windows.Documents;
  405. using System.Windows.Input;
  406. using System.Windows.Media;
  407. using System.Windows.Media.Imaging;
  408. using System.Windows.Shapes;
  409.  
  410. namespace NSUserConnected
  411. {
  412. /// <summary>
  413. /// Lógica de interacción para login.xaml
  414. /// </summary>
  415. public partial class login : Window
  416. {
  417. public login()
  418. {
  419. InitializeComponent();
  420. }
  421.  
  422. private void button1_Click(object sender, RoutedEventArgs e)
  423. {
  424. (Application.Current as App).myChat.JoinUserClient(TextBoxName.Text);
  425. this.Close();
  426. }
  427.  
  428. }
  429. }
  430.  
  431. using System;
  432. using System.Collections.Generic;
  433. using System.Linq;
  434. using System.Text;
  435. using System.Threading.Tasks;
  436. using System.Windows;
  437. using System.Windows.Controls;
  438. using System.Windows.Data;
  439. using System.Windows.Documents;
  440. using System.Windows.Input;
  441. using System.Windows.Media;
  442. using System.Windows.Media.Imaging;
  443. using System.Windows.Shapes;
  444.  
  445. namespace NSUserConnected
  446. {
  447. /// <summary>
  448. /// Lógica de interacción para UserPanel.xaml
  449. /// </summary>
  450. public partial class UserPanel : Window
  451. {
  452. public UserPanel()
  453. {
  454. InitializeComponent();
  455. }
  456.  
  457. private void ButtonSendMsg_Click(object sender, RoutedEventArgs e)
  458. {
  459. //Aquest és un dels mètodes de la classe ChatClient que haureu de programar
  460. (Application.Current as App).myChat.SendMessageToServer(TextBoxMsg.Text, TextBoxDest.Text);
  461. }
  462. }
  463. }
Add Comment
Please, Sign In to add comment