// Receive data private void ReceiveCallback(IAsyncResult ar) { Socket socket = ar.AsyncState as Socket; if (socket.Connected) { int received; try { received = socket.EndReceive(ar); } catch (Exception ex) { // Close connection CloseClientConnection("Probléma az adatok fogadása közben..." + Environment.NewLine + ex.Message, socket.RemoteEndPoint); return; } // Get received movie object or movie command if (received != 0) { byte[] dataBuf = new byte[received]; Array.Copy(buffer, dataBuf, received); // Client sent a movie if (received != 194) { MovieViewModel movieViewModel = MovieMap.MapToMovieViewModel(BinaryConverter.BinaryToMovieObject(dataBuf)); LoggerService.Instance.Loggers.Add(new Logger { Id = LoggerService.Instance.LastId + 1, Message = "Kliens kiválasztott egy filmet ---\n\t" + movieViewModel.Title, Sender = Sender.SocketServer, LogDate = DateTime.Now }); connection.ClientSockets.FirstOrDefault(c => c.ClientSocket == socket).IsPlayMovie = true; // Start playing movie Application.Current.Dispatcher.Invoke(() => { ((ModernWindow)Application.Current.MainWindow).Hide(); new PlayerWindow(movieViewModel).Show(); }); // Listen again (Receive data) socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); } // Client sent a movie command else { MovieCommand commandEnum = BinaryConverter.BinaryToCommandEnum(dataBuf); if (commandEnum != MovieCommand.CloseClient) { // Process movie command Application.Current.Dispatcher.Invoke(() => { PlayerWindow playerWindow = Application.Current.Windows.OfType <PlayerWindow>().FirstOrDefault(); switch (commandEnum) { case MovieCommand.StartPauseMovie: playerWindow.PlayPause(); break; case MovieCommand.StopMovie: playerWindow.Stop(); break; case MovieCommand.RewindMovie: playerWindow.Rewind(); break; case MovieCommand.ForwardMovie: playerWindow.Forward(); break; case MovieCommand.SoundPlus: playerWindow.SoundPlus(); break; case MovieCommand.SoundMinus: playerWindow.SoundMinus(); break; case MovieCommand.Mute: playerWindow.MuteOnOff(); break; case MovieCommand.FullScreen: playerWindow.SetFullScreen(); break; case MovieCommand.ShutdownPc: playerWindow.SetPcOption(PCOption.Shutdown); break; case MovieCommand.Restart: playerWindow.SetPcOption(PCOption.Restart); break; case MovieCommand.Hibernate: playerWindow.SetPcOption(PCOption.Hibernate); break; case MovieCommand.LogOff: playerWindow.SetPcOption(PCOption.LogOff); break; case MovieCommand.Sleep: playerWindow.SetPcOption(PCOption.Sleep); break; case MovieCommand.Lock: playerWindow.SetPcOption(PCOption.Lock); break; case MovieCommand.CloseMovie: playerWindow.CloseWindow(); break; } }); // Listen again (Receive data) socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); } else { CloseClientConnection("A kliens bezárta a kapcsolatot", socket.RemoteEndPoint); } } } else { CloseClientConnection("Nem érhető el a kliens", socket.RemoteEndPoint); } } else { CloseClientConnection("Nem érhető el a kliens", socket.RemoteEndPoint); } }