public void EstablishConnection(LoginClientLL login_service, RepeatedField <LoginServices.Server> servers) { Debug.Assert(servers.Count > 0); Debug.Assert(base_service == null, "A base service operation is already taking place..."); Debug.Assert(login_service == null, "Internal error. login service and base service always has to be in sync..."); login_service.OnDisconnected += on_login_client_disconnected; login_service.OnServerDisconnected += on_main_server_caused_disconnection; var selected_server_idx = MainThread <System.Random> .Get().Next(0, servers.Count - 1); selected_server = servers[selected_server_idx]; base_service = new BaseClientLL(new Channel(selected_server.Url, ChannelCredentials.Insecure)); //TODO: SSL, Compression base_service.OnDisconnected += on_base_server_disconnected; base_service.OnSuccessfulSubscription += on_successful_subscription; base_service.ConnectAsync(); }