Beispiel #1
0
        /// <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 = ""
            });
        }