/// <summary> /// Establishes a connection with Cassandra. /// </summary> /// <param name="request"></param> /// <param name="context"></param> /// <returns>A message indicating connection success</returns> public override async Task <ConnectResponse> Connect(ConnectRequest request, ServerCallContext context) { Logger.SetLogPrefix("connect"); // validate settings passed in try { _server.Settings = JsonConvert.DeserializeObject <Settings>(request.SettingsJson); _server.Settings.Validate(); } catch (Exception e) { Logger.Error(e, e.Message); return(new ConnectResponse { OauthStateJson = request.OauthStateJson, ConnectionError = "", OauthError = "", SettingsError = e.Message }); } // initialize connection factory try { _sessionFactory.Initialize(_server.Settings); } catch (Exception e) { Logger.Error(e, e.Message); return(new ConnectResponse { OauthStateJson = request.OauthStateJson, ConnectionError = e.Message, OauthError = "", SettingsError = "" }); } // test cluster factory //var conn = _sessionFactory.GetConnection(); var session = Cluster.Builder() .AddContactPoint(_server.Settings.Hostname).WithPort(Int32.Parse(_server.Settings.Port)) .WithCredentials(_server.Settings.Username, _server.Settings.Password) .Build(); try { session.Connect(); } catch (Exception e) { Logger.Error(e, e.Message); return(new ConnectResponse { OauthStateJson = request.OauthStateJson, ConnectionError = e.Message, OauthError = "", SettingsError = "" }); } finally { await session.ShutdownAsync(); } // try // { // await conn.OpenAsync(); // // if (!await conn.PingAsync()) // { // return new ConnectResponse // { // OauthStateJson = request.OauthStateJson, // ConnectionError = "Unable to ping target database.", // OauthError = "", // SettingsError = "" // }; // } // } // catch (Exception e) // { // Logger.Error(e, e.Message, context); // // return new ConnectResponse // { // OauthStateJson = request.OauthStateJson, // ConnectionError = e.Message, // OauthError = "", // SettingsError = "" // }; // } // finally // { // await conn.CloseAsync(); // } _server.Connected = true; return(new ConnectResponse { OauthStateJson = request.OauthStateJson, ConnectionError = "", OauthError = "", SettingsError = "" }); }