示例#1
0
        public IEnumerator UpdateGameStateCoroutine()
        {
            this.runningUpdate = true;
            this.SendCommand("updateGameState");
            var query = new Engine.Query(this.gameState, this.shots);

            this.SendCommand(JsonUtility.ToJson(query, false));

            yield return(new WaitWhile(() => this.runningUpdate));
        }
示例#2
0
        public QueryResponse GetData(DatabaseConnection connection, string nodes, string nodeId, int?startRow, int?rowCount)
        {
            var data = new QueryResponse()
            {
                Status = "ok"
            };

            string error;
            bool   success = TryUseDbConnection(connection, (dbCon) =>
            {
                var dbModel = GetDbModel(connection);

                var tableNames = ExtractTableNamesFromNodes(nodes).ToList();
                var dbTables   = dbModel.Tables.Where(t => tableNames.Contains(t.DisplayName)).Select(t => t as Engine.ITableInfo).ToList();

                bool logQueries = _config.GetValue <bool>("LogQueries", false);

                var engine = new Engine.Query((Engine.DatabaseType)connection.Type, nodes, dbTables);

                using (var cmd = DbManager.CreateCommand(connection.Type, dbCon, engine.GetSql(nodeId, startRow, rowCount)))
                {
                    using (var reader = cmd.ExecuteReader())
                    {
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            data.Columns.Add(reader.GetName(i));
                            data.ColumnTypes.Add(RemoveLengthSpecifier(reader.GetDataTypeName(i)));
                        }

                        while (reader.Read())
                        {
                            var row = new List <object>();
                            for (int i = 0; i < reader.VisibleFieldCount; i++)
                            {
                                object val = reader.GetValue(i);
                                if (val == DBNull.Value)
                                {
                                    row.Add(null);
                                }
                                else
                                {
                                    row.Add(val);
                                }
                            }
                            data.Rows.Add(row);
                        }

                        if (logQueries)
                        {
                            data.Query = cmd.CommandText;
                        }
                    }
                }

                using (var cmd = DbManager.CreateCommand(connection.Type, dbCon, engine.GetRowCountSql(nodeId)))
                {
                    // we don't know if the scalar will be an int/long/other so we have to convert to avoid an unboxing error
                    data.RowCount = (long)Convert.ChangeType(cmd.ExecuteScalar(), typeof(long));
                }
            }, out error);

            if (!success)
            {
                data = new QueryResponse()
                {
                    Status = "error", ErrorText = error
                };
            }

            return(data);
        }