void polaczSie() { // uruchom oddzielny watek dla obiektu odpowiedzialnego za komunikacje komunikator = dajKomunikator(); if (komunikator == null) { comboStatus.SelectedIndex = 1; return; } polaczony = true; // zapisujemy sie jako sluchacz wydarzenia NowaWiadomosc komunikator.NowaWiadomosc += komunikator_NowaWiadomosc; // zapisujemy sie jako sluchacz wydarzenia ZmianaStanuPolaczenia komunikator.ZmianaStanuPolaczenia += komunikator_ZmianaStanuPolaczenia; komunikator.Opis = ustawienia.Opis; // nawiaz polaczenia z kontaktami komunikator.Start(); oknaCzatu.Values.ToList().ForEach(o => o.Komunikator = komunikator); }
void rozlaczSie() { // glowne okno programu zostalo zamkniete, dlatego zatrzymujemy dzialanie // obiektu odpowiedzialnego za komunikacje komunikator.Stop(); polaczony = false; // zakoncz watek obiektu odpowiedzialnego za komunikacje // zaktualizuj obiekt w oknach czat oknaCzatu.Values.ToList().ForEach(o => o.Komunikator = null); komunikator = null; }
Komunikator dajKomunikator() { var mapaAdresowIpKontaktow = new Dictionary<string, IPAddress>(); kontakty.ForEach(k => mapaAdresowIpKontaktow.Add(k.ID, k.IP)); if (ustawienia.SSLWlaczone && ustawienia.Certyfikat == null) { var haslo = poprosHasloCertyfikatu(); if (haslo == null) { MessageBox.Show("Brak hasła do certyfikatu uniemożliwia połączenie."); return null; } try{ ustawienia.Certyfikat = new X509Certificate2(ustawienia.SSLCertyfikatSciezka, haslo); }catch(CryptographicException ex){ MessageBox.Show("Nastąpił błąd podczas otwierania certyfikatu: " + ex.Message); return null; } } // zainicjalizuj obiekt odpowiedzialny za przesylanie / odbieranie wiadomosci var komunikator = new Komunikator(mapaAdresowIpKontaktow, ustawienia); return komunikator; }