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)); }
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); }