Komunikacja klient-serwer na eventach

0

Cześć,

Wraz z kolegą na zaliczenie piszemy komunikator, klient w C#, serwer w Javie. Całości opiera się na Websocketach i działa mniej więcej tak:

Klikam przycisk, zostaje wywołana metoda która wysyła message do serwera z danymi rejestracji, jednocześnie kontroler ma za subskrybowany event zwrotny który zostanie wywołany jak tylko otrzymam message OnRegister. Wszystko fajnie, jakoś to działa.

Kontroler:


void Login()   
{
var packet = new RegisterDataPacket() { Login = login, Email = email, Password = SecurityHandler.GetShaWithSalt(password) };
RegisterEndpoint.Send(typeof(RegisterDataPacket).Name, packet);
RegisterView.RegisterStarted(); 
}
======================================
void OnRegisterStatus(RegisterStatusPacket packet)
{
      if (packet.Status)
      {
            RegisterView.RegisterSuccess();
       }
       else
       {
            RegisterView.RegisterFailed();
        }
}


Widok:

public void RegisterFailed()
        {
            this.InvokeOnRequired(() =>
            {
                SetControlsState(true);
                labelStatus.ForeColor = Color.Red;
                labelStatus.Text = "Rejestracja nie powiodła się.";
            });

        }

        public void RegisterSuccess()
        {
            this.InvokeOnRequired(() =>
            {
                SetControlsState(true);
                labelStatus.ForeColor = Color.Green;
                labelStatus.Text = "Rejestracja powiodła się.";
                Close();
            });
        }
 

Niestety te rozwiązanie słabo mi odpowiada. Chciałbym już na poziomie metody Login wiedzieć czy operacja się udała czy nie, nie mogę czekać tam jednak na wynik operacji bo raz ze message odbierane są z biblioteki przez eventy, a dwa ze blokowałoby to UI. Pytanie brzmi jak optymalnie powinno to wyglądać? Czytałem coś o async/await oraz TaskCompletionSource ale nie za bardzo rozumiem jak to powinno wyglądać.

0
Dzieńdobry, jestem Jan Piekielny, chciałbym się uwierzytelnić używając tego hasła *wyciąga karteczkę*.
Ekspedientka z uśmiechem na ustach mówi:
Spróbuję pana zalogować
*Uśmiecha się*
*Uśmiecham się*
o, mamy wyniki!

Udało się?

Oczywiście, że nie :)

Nie do przeskoczenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1