private void DistributeComunicatToAll(Comunicat item) { var connectedUsers = listaPolaczec.Keys; String[] oldBlackList = item.NotToUser; // dodajemu użytkowników do czarnej listy HashSet<string> newBlackList = new HashSet<string>(item.NotToUser); foreach(var user in listaPolaczec.Keys) { if(!newBlackList.Contains(user)) { newBlackList.Add(user); } } item.NotToUser = newBlackList.ToArray<String>(); // wysyłamy wiadomości do urzytkowników foreach(var user in listaPolaczec) { if(!oldBlackList.Contains(user.Key) && user.Key != UNKNOWN_USER) { foreach(var modul in user.Value) { modul.addComunicatToSend(item); } } } }
// comunicat UNKNOWN - zawiera w To user UNKNOWN na pierwszej pozycji oraz adres połączenia na drugiej pozycji private void DistributeComunicatToUnknown(Comunicat item) { ICollection<ComunicationItem> unknowUsers = null; if(listaPolaczec.TryGetValue(UNKNOWN_USER, out unknowUsers) ) { foreach(var user in unknowUsers) { if (item.ToUser[1] == user.Connection.getConnectionAddres()) { user.addComunicatToSend(item); } } } // jak nie mamy kategori unknow... nic nie robimy //var unknowsUsers = item. }
public void addComunicatToSend(Comunicat com) { comunicatsToSend.Enqueue(com); }
public static string serialize(Comunicat comunicatToSerialize) { return JsonConvert.SerializeObject(comunicatToSerialize, Formatting.None); }
public void DistributeComunicat(Comunicat item) { var connectedUsers = listaPolaczec.Keys; HashSet<string> oldBlackList = new HashSet<string>(item.NotToUser); if(item.ToUser.Contains("ALL")) { DistributeComunicatToAll(item); } else if(item.ToUser.Contains("UNKNOWN")) { DistributeComunicatToUnknown(item); } else { //tworzymy nową czarną listę do komunikatu HashSet<string> newBlackList = new HashSet<string>(item.NotToUser); foreach(var userName in item.ToUser) { if (!newBlackList.Contains(userName)) newBlackList.Add(userName); } item.NotToUser = newBlackList.ToArray(); //wysyłamy do wszystkich osob w ToUser którzy nie są na czarnej liście foreach(var userName in item.ToUser) { if(!oldBlackList.Contains(userName)) { ICollection<ComunicationItem> userComunicationItems = null; if(listaPolaczec.TryGetValue(userName,out userComunicationItems) ) { // oraz do wszystkich rodzajow polaczenia foreach(var comItem in userComunicationItems) { comItem.addComunicatToSend(item); } } } } } }