Example #1
0
        /// <summary>
        /// A method that takes a Query, and writes a log of that Query and when it was
        /// executed to a file on disk. All Queries executed on a given day are written
        /// to a file with that date as the filename. There's not a massive amount
        /// of complex logic here, just StreamWriters.
        /// </summary>
        /// <param name="query">The Query object to log.</param>
        /// <param name="remoteQuery">Whether or not this was a query processed on the server.</param>
        internal static void LogToDisk(Query query, bool remoteQuery)
        {
            string directoryPath = ConfigurationManager.AppSettings["LoggingDirectory"];
            string queryLogString;
            if (remoteQuery)
            {
                queryLogString = query.ToString() + " processed on server";

            }
            else
            {
                queryLogString = query.ToString();
            }

            if(Directory.Exists(directoryPath))
            {
                DateTime currentDay = DateTime.Today.Date;
                if (File.Exists(directoryPath + @"\" + currentDay.ToString(DATE_FORMAT) + ".txt"))
                {

                    using (StreamWriter fileWriter = new StreamWriter(directoryPath + @"\" + currentDay.ToString(DATE_FORMAT) + ".txt", true))
                    {
                        fileWriter.WriteLine(queryLogString);
                    }
                }
                else
                {
                    using (StreamWriter fileWriter = new StreamWriter(directoryPath + @"\" + currentDay.ToString(DATE_FORMAT) + ".txt", false))
                    {
                        fileWriter.WriteLine(queryLogString);
                    }
                }
            }
        }
Example #2
0
        /// <summary>
        /// A method that takes a Query, sends that Query
        /// to the NoiseDB server you're connected to,
        /// waits to receive the QueryResult of executing
        /// that Query, and returns it.
        /// </summary>
        /// <param name="query">The Query to execute on the server.</param>
        /// <returns>
        /// The QueryResult of the executed Query.
        /// </returns>
        public QueryResult SendQueryAndReturnResult(Query query)
        {
            Byte[] byteBuffer = new Byte[ByteArraySize];
            string jsonSerializedQuery = JsonConvert.SerializeObject(query);
            byteBuffer = Encoding.ASCII.GetBytes(jsonSerializedQuery);

            int responseBytes;
            Byte[] responseByteBuffer;
            responseByteBuffer = WriteQueryToStreamAndReadResult(ClientStream, byteBuffer, out responseBytes);
            string jsonSerializedQueryResult = Encoding.ASCII.GetString(responseByteBuffer, 0, responseBytes);
            QueryResult response;

            try
            {
                response = JsonConvert.DeserializeObject<QueryResult>(jsonSerializedQueryResult);
            }
            catch(JsonException e)
            {
                return new QueryResult("Failed", e, null);
            }
            return response;
        }
Example #3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public QueryResult ExecuteQuery(Query query)
        {
            if (IsConnectedToNetworkDataStore)
            {
                if (LoggingEnabled)
                {
                    LoggingService.LogToDisk(query, true);
                }
                if (query.Command == Commands.SERVER_DISCONNECT)
                {
                    IsConnectedToNetworkDataStore = false;
                }
                return QueryTcpClient.SendQueryAndReturnResult(query);
            }

            if (LoggingEnabled)
            {
                LoggingService.LogToDisk(query, false);
            }

            switch (query.Command)
            {
                case Commands.GET:
                    return GetValue(query);

                case Commands.SET:
                    return SetValue(query);

                case Commands.DELETE:
                    return DeleteValue(query);

                case Commands.SERVER_START:
                    return StartServer(query);

                case Commands.SERVER_STOP:
                    return StopServer();

                case Commands.SERVER_CONNECT:
                    return ServerConnect(query);

                case Commands.SERVER_DISCONNECT:
                    IsConnectedToNetworkDataStore = false;
                    return new QueryResult("Success", null, null);

                case Commands.SAVE:
                    return SaveDataStore(query);

                case Commands.LOAD:
                    return LoadDataStore(query);

                default:
                    return new QueryResult("Unrecognised Command", null, null);
             }
        }
Example #4
0
 /// <summary>
 /// 
 /// </summary>
 /// <returns></returns>
 private QueryResult StartServer(Query query)
 {
     return QueryTcpServer.StartListener(query.Key);
 }
Example #5
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 private QueryResult SetValue(Query query)
 {
     if (string.IsNullOrEmpty(query.Argument) || string.IsNullOrEmpty(query.Key))
     {
         return new QueryResult("Failed", new ArgumentNullException(), null);
     }
     return DataService.SetValue(query.Key, query.Argument);
 }
Example #6
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 private QueryResult ServerDisconnect(Query query)
 {
     IsConnectedToNetworkDataStore = false;
     return new QueryResult("Success", null, null);
 }
Example #7
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        private QueryResult ServerConnect(Query query)
        {
            try
            {
                if (string.IsNullOrEmpty(query.Key))
                {
                    return new QueryResult("Failed", new ArgumentNullException(nameof(query.Key)), null);
                }

                IsConnectedToNetworkDataStore = true;
                return QueryTcpClient.Connect(query.Key).Result;
            }
            catch(Exception e)
            {
                return null;
            }
        }
Example #8
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 private QueryResult SaveDataStore(Query query)
 {
     if (string.IsNullOrEmpty(query.Key))
     {
         return new QueryResult("Failed", new ArgumentNullException(nameof(query.Key)), null);
     }
     return DataService.SaveStore(query.Key);
 }