68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using YapperClient.MVVM.Core;
|
|
using YapperClient.MVVM.Model;
|
|
using YapperClient.Net;
|
|
|
|
namespace YapperClient.MVVM.ViewModel
|
|
{
|
|
class MainViewModel
|
|
{
|
|
public ObservableCollection<UserModel> Users { get; set; }
|
|
public ObservableCollection<string> Messages { get; set; }
|
|
public RelayCommand ConnectToServerCommand { get; set; }
|
|
public RelayCommand SendMessageCommand { get; set; }
|
|
|
|
public string UserName { get; set; }
|
|
public string Message { get; set; }
|
|
|
|
private Server _server;
|
|
public MainViewModel() {
|
|
Users = new ObservableCollection<UserModel>();
|
|
Messages = new ObservableCollection<string>();
|
|
|
|
_server = new Server();
|
|
_server.connectedEvent += UserConnected;
|
|
_server.msgReceivedEvent += MessageReceived;
|
|
_server.userDisconnectedEvent += RemoveUser;
|
|
ConnectToServerCommand = new RelayCommand(o => _server.ConnectToServer(UserName), o => !string.IsNullOrEmpty(UserName));
|
|
|
|
SendMessageCommand = new RelayCommand(o => _server.SendMessageToServer(Message), o => !string.IsNullOrEmpty(Message));
|
|
}
|
|
|
|
private void RemoveUser()
|
|
{
|
|
var uid = _server.PacketReader.ReadMessage();
|
|
var user = Users.FirstOrDefault(x => x.UID == uid);
|
|
|
|
Application.Current.Dispatcher.Invoke(() => Users.Remove(user));
|
|
}
|
|
|
|
|
|
private void MessageReceived()
|
|
{
|
|
var msg = _server.PacketReader.ReadMessage();
|
|
Application.Current.Dispatcher.Invoke(() => Messages.Add(msg));
|
|
}
|
|
|
|
private void UserConnected()
|
|
{
|
|
var user = new UserModel
|
|
{
|
|
UserName = _server.PacketReader.ReadMessage(),
|
|
UID = _server.PacketReader.ReadMessage(),
|
|
};
|
|
|
|
if (!Users.Any(x => x.UID == user.UID))
|
|
{
|
|
Application.Current.Dispatcher.Invoke(() => Users.Add(user));
|
|
}
|
|
}
|
|
}
|
|
}
|