private void Instance_OnReceiveData(SocketManager.SocketClient sender, byte[] e) { if (e[0] == 1) { var data = FileCommunicationObject.ByteArrayToFile(e); if (data != null && data.ChatNum == this.ChatNum) { App.Current.Dispatcher.Invoke(new Action(() => { this.FileList.Add(data); this.Messages.Add(data.Sender + " 님이 파일을 전송했습니다."); })); } } else { var data = CommunicationObject.Parse(Encoding.UTF8.GetString(e)) as ChatMessage; if (data != null && data.ChatNum == this.ChatNum) { Application.Current.Dispatcher.Invoke(new Action(() => { this.Messages.Add(data.Sender.UserID + " : " + data.Message); })); } var receiveData2 = FriendsCollection.Parse(Encoding.UTF8.GetString(e)) as FriendsCollection; if (receiveData2 != null) { this.Friends = receiveData2.Friends; } } }
/// <summary> /// Конструктор по умолчанию. /// </summary> public FriendsViewModel(string uniqueKey, ulong userID) : base(uniqueKey) { _friends = new FriendsCollection(userID); _friendsOnline = new FriendsOnlineCollection(userID); _friendsList = new FriendsListCollection(userID); RefreshCommand = new RelayCommand(() => Friends.Refresh()); RefreshOnlineCommand = new RelayCommand(() => FriendsOnline.Refresh()); RefreshListCommand = new RelayCommand(() => FriendsList.Refresh()); }
void OnSelectedEmployeeChanged() { FriendsCollection.Clear(); KnownPersonsCollection.Clear(); if (SelectedEmployee == null) { return; } GetFriends(SelectedEmployee).ForEach(friend => FriendsCollection.Add(friend)); GetKnownPersons(SelectedEmployee).ForEach(friend => KnownPersonsCollection.Add(friend)); }
private void Instance_OnReceiveData(SocketManager.SocketClient sender, byte[] data) { if (data[0] != 1) { var receiveData = ChatInfo.Parse(Encoding.UTF8.GetString(data)) as ChatInfo; if (receiveData != null) { if (this.OnChatStart != null) { this.OnChatStart(this, receiveData); } return; } var receiveData2 = FriendsCollection.Parse(Encoding.UTF8.GetString(data)) as FriendsCollection; if (receiveData2 != null) { this.Friends = receiveData2.Friends; } } }
public MainViewModel() { server.OnConnectedClient += (client) => { client.OnReceiveData += (senderClient, data) => { var sender = senderClient as Client; if (data[0] == 1) { FileCommunicationObject receivedMessage = FileCommunicationObject.ByteArrayToFile(data); if (receivedMessage.ChatNum == -1) { string path = @"D:\\LittleCloudDirectory\\" + receivedMessage.Sender; bool existflag = System.IO.Directory.Exists(path); if (!existflag) { System.IO.Directory.CreateDirectory(path); } System.IO.File.WriteAllBytes(path + "\\" + receivedMessage.FileName, receivedMessage.File); DAO.CloudFileSave(receivedMessage.Sender, path + "\\" + receivedMessage.FileName, receivedMessage.FileName); CloudFilesCollection sendData = new CloudFilesCollection(); sendData.DataType = DataType.FilesCollection; sendData.Files = DAO.getCloudFileList(receivedMessage.Sender); sender.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); } else { var members = DAO.getMembersInChatRoom(receivedMessage.ChatNum); foreach (var item in members) { foreach (var item2 in this.server.m_ConnectedClient) { if (item2.Member.UserID == item.UserID) { var sendData = receivedMessage.FileToByteArray(); item2.SendData(sendData); break; } } } } } else { CommunicationObject receivedMessage = CommunicationObject.Parse(Encoding.UTF8.GetString(data)); switch (receivedMessage.DataType) { case DataType.CloudSystem: CloudSystemMessage csm = receivedMessage as CloudSystemMessage; if (csm.Message == "CloudDownload") { int idx = 0; byte signal = 1; byte[] fileName = Encoding.UTF8.GetBytes(csm.FileName); byte[] contents = File.ReadAllBytes(@"D:\\LittleCloudDirectory\\" + csm.Sender.UserID + "\\" + csm.FileName); byte[] result = new byte[fileName.Length + contents.Length + 2]; result[idx++] = signal; for (int i = 0; i < fileName.Length; i++) { result[idx++] = fileName[i]; } result[idx++] = Encoding.UTF8.GetBytes("|")[0]; for (int i = 0; i < contents.Length; i++) { result[idx++] = contents[i]; } sender.SendData(result); } else if (csm.Message == "DeleteCloudFile") { File.Delete(@"D:\\LittleCloudDirectory\\" + csm.Sender.UserID + "\\" + csm.FileName); DAO.CloudFileDelete(csm.Sender.UserID, csm.FileName); CloudFilesCollection sendData = new CloudFilesCollection(); sendData.DataType = DataType.FilesCollection; sendData.Files = DAO.getCloudFileList(csm.Sender.UserID); sender.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); } break; case DataType.System: SystemMessage systemMessage = receivedMessage as SystemMessage; if (systemMessage.Message == "Login") { try { DAO.Login(systemMessage.Sender.UserID, systemMessage.Sender.Passwd); var sendData = new SystemMessage(); sendData.DataType = DataType.System; sendData.Message = "Success"; sender.Member = new Member() { UserID = systemMessage.Sender.UserID, IsLogin = true }; sender.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); } catch (Exception e) { var sendData = new SystemMessage(); sendData.DataType = DataType.System; sendData.Message = e.Message; sender.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); } } else if (systemMessage.Message == "getFriends") { FriendsCollection sendData = new FriendsCollection(); sendData.DataType = DataType.FriendsCollection; sendData.Friends = DAO.getFriends(sender.Member.UserID); sender.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); } else if (systemMessage.Message == "Logout") { var chatRooms = DAO.Logout(systemMessage.Sender.UserID); sender.StopClient(); server.m_ConnectedClient.Remove(sender); foreach (var item in chatRooms) { var members = DAO.getMembersInChatRoom(item); foreach (var item1 in members) { foreach (var item2 in this.server.m_ConnectedClient) { if (item2.Member.UserID == item1.UserID) { var sendData = new ChatMessage(); sendData.Sender = systemMessage.Sender; sendData.Message = "님이 나가셨습니다."; sendData.ChatNum = item; item2.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); break; } } } } } else if (systemMessage.Message == "getCloudFileList") { CloudFilesCollection sendData = new CloudFilesCollection(); sendData.DataType = DataType.FilesCollection; sendData.Files = DAO.getCloudFileList(systemMessage.Sender.UserID); sender.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); } break; case DataType.FriendsCollection: FriendsCollection sendFriendsData = receivedMessage as FriendsCollection; if (sendFriendsData.chatNum == -1) { int chatNum = DAO.StartChat(sendFriendsData.Friends); foreach (var item in sendFriendsData.Friends) { foreach (var item2 in this.server.m_ConnectedClient) { if (item2.Member.UserID == item.UserID) { ChatInfo chatInfo = new ChatInfo() { Friends = sendFriendsData.Friends, ChatNum = chatNum }; item2.SendData(Encoding.UTF8.GetBytes(chatInfo.ToString())); break; } } } } else { var members = DAO.getMembersNotInChatRoom(sendFriendsData.chatNum); var temp = DAO.getMembersInChatRoom(sendFriendsData.chatNum); ObservableCollection <Member> resultMembers = new ObservableCollection <Member>(); ObservableCollection <Member> addMembers = new ObservableCollection <Member>(); foreach (var item in temp) { resultMembers.Add(item); } foreach (var item1 in members) { foreach (var item2 in sendFriendsData.Friends) { if (item1.UserID == item2.UserID) { resultMembers.Add(item1); addMembers.Add(item1); break; } } } foreach (var item in addMembers) { foreach (var item2 in this.server.m_ConnectedClient) { if (item2.Member.UserID == item.UserID) { DAO.InviteChat(item.UserID, sendFriendsData.chatNum); ChatInfo chatInfo = new ChatInfo() { Friends = resultMembers, ChatNum = sendFriendsData.chatNum }; item2.SendData(Encoding.UTF8.GetBytes(chatInfo.ToString())); break; } } } } break; case DataType.ChatMessage: ChatMessage sendChatData = receivedMessage as ChatMessage; if (sendChatData.Message == "Exitroom") { DAO.ExitRoom(sendChatData.Sender.UserID, sendChatData.ChatNum); var members = DAO.getMembersInChatRoom(sendChatData.ChatNum); foreach (var item in members) { foreach (var item2 in this.server.m_ConnectedClient) { if (item2.Member.UserID == item.UserID) { var sendData = new ChatMessage(); sendData.Sender = sendChatData.Sender; sendData.Message = "님이 나가셨습니다."; sendData.ChatNum = sendChatData.ChatNum; item2.SendData(Encoding.UTF8.GetBytes(sendData.ToString())); break; } } } } else { var members = DAO.getMembersInChatRoom(sendChatData.ChatNum); foreach (var item in members) { foreach (var item2 in this.server.m_ConnectedClient) { if (item2.Member.UserID == item.UserID) { item2.SendData(data); break; } } } } break; default: break; } } }; }; }