internal JsonException (ParserToken token, Exception inner_exception) : base (String.Format ( "Invalid token '{0}' in input string", token), inner_exception) { }
private static void TableAddCol(ParserToken row, int col, params int[] symbols) { (JsonReader.parse_table[(int)row] as IDictionary).Add(col, symbols); }
private static void TableAddCol(IDictionary <int, IDictionary <int, int[]> > parse_table, ParserToken row, int col, params int[] symbols) { parse_table[(int)row].Add(col, symbols); }
internal JsonException(ParserToken token, Exception inner_exception) : base(string.Format("Invalid token '{0}' in input string", token), inner_exception) { }
internal JsonException(ParserToken token) : base($"Invalid token '{token}' in input string") { }
private void Reset() { _currentLeftPart = new StringBuilder(); _currentRightPart = new StringBuilder(); _currentToken = ParserToken.BeginPart; }
/// <summary> /// 实例化 <see cref="SqlBuilder"/> 类的新实例 /// </summary> /// <param name="provider">提供者</param> /// <param name="token">参数列表,NULL 或者 Parameters=NULL 时表示不使用参数化</param> public SqlBuilder(IDbQueryProvider provider, ParserToken token) : base(provider, token) { }
private static void TableAddRow(ParserToken rule) { _parseTable.Add((int) rule, new System.Collections.Generic.Dictionary<int, int[]>()); }
// 创建 UPDATE 命令 protected override Command ParseUpdateCommand <T>(DbQueryableInfo_Update <T> uQueryInfo, ParserToken token) { ISqlBuilder builder = this.CreateSqlBuilder(token); var typeRuntime = TypeRuntimeInfoCache.GetRuntimeInfo <T>(); builder.Append("UPDATE "); builder.AppendMember(typeRuntime.TableName, !typeRuntime.IsTemporary); builder.Append(" t0"); if (uQueryInfo.Entity != null) { object entity = uQueryInfo.Entity; ISqlBuilder whereBuilder = this.CreateSqlBuilder(token); bool useKey = false; int length = 0; builder.AppendNewLine(" SET"); foreach (var kv in typeRuntime.Invokers) { MemberInvokerBase invoker = kv.Value; var column = invoker.Column; if (column != null && column.IsIdentity) { goto gotoLabel; // fix issue# 自增列同时又是主键 } if (column != null && column.NoMapped) { continue; } if (invoker.ForeignKey != null) { continue; } if (invoker.Member.MemberType == System.Reflection.MemberTypes.Method) { continue; } builder.AppendMember("t0", invoker.Member.Name); builder.Append(" = "); gotoLabel: var value = invoker.Invoke(entity); var seg = builder.GetSqlValueWidthDefault(value, column); if (column == null || !column.IsIdentity) { builder.Append(seg); length = builder.Length; builder.Append(','); builder.AppendNewLine(); } if (column != null && column.IsKey) { useKey = true; whereBuilder.AppendMember("t0", invoker.Member.Name); whereBuilder.Append(" = "); whereBuilder.Append(seg); whereBuilder.Append(" AND "); } } if (!useKey) { throw new XFrameworkException("Update<T>(T value) require T must have key column."); } builder.Length = length; whereBuilder.Length -= 5; builder.AppendNewLine(); builder.Append("WHERE "); builder.Append(whereBuilder); } else if (uQueryInfo.Expression != null) { TableAliasCache aliases = this.PrepareAlias <T>(uQueryInfo.SelectInfo, token); ExpressionVisitorBase visitor = null; var cmd2 = new SelectCommand(this, aliases, token) { HasManyNavigation = uQueryInfo.SelectInfo.HasManyNavigation }; visitor = new JoinExpressionVisitor(this, aliases, uQueryInfo.SelectInfo.Joins); visitor.Write(cmd2.JoinFragment); cmd2.WhereFragment.AppendNewLine(); cmd2.WhereFragment.AppendNewLine("SET"); visitor = new UpdateExpressionVisitor(this, aliases, uQueryInfo.Expression); visitor.Write(cmd2.WhereFragment); visitor = new WhereExpressionVisitor(this, aliases, uQueryInfo.SelectInfo.WhereExpression); visitor.Write(cmd2.WhereFragment); cmd2.AddNavMembers(visitor.NavMembers); builder.Append(cmd2.CommandText); } builder.Append(';'); return(new Command(builder.ToString(), builder.Token != null ? builder.Token.Parameters : null, System.Data.CommandType.Text)); }
// 创建 DELETE 命令 protected override Command ParseDeleteCommand <T>(DbQueryableInfo_Delete <T> dQueryInfo, ParserToken token) { TypeRuntimeInfo typeRuntime = TypeRuntimeInfoCache.GetRuntimeInfo <T>(); ISqlBuilder builder = this.CreateSqlBuilder(token); bool useKey = false; builder.Append("DELETE t0 FROM "); builder.AppendMember(typeRuntime.TableName, !typeRuntime.IsTemporary); builder.Append(" t0 "); if (dQueryInfo.Entity != null) { object entity = dQueryInfo.Entity; builder.AppendNewLine(); builder.Append("WHERE "); foreach (var kv in typeRuntime.Invokers) { MemberInvokerBase invoker = kv.Value; var column = invoker.Column; if (column != null && column.IsKey) { useKey = true; var value = invoker.Invoke(entity); var seg = builder.GetSqlValue(value, column); builder.AppendMember("t0", invoker.Member.Name); builder.Append(" = "); builder.Append(seg); builder.Append(" AND "); } ; } builder.Length -= 5; if (!useKey) { throw new XFrameworkException("Delete<T>(T value) require T must have key column."); } } else if (dQueryInfo.SelectInfo != null) { TableAliasCache aliases = this.PrepareAlias <T>(dQueryInfo.SelectInfo, token); var cmd2 = new SelectCommand(this, aliases, token) { HasManyNavigation = dQueryInfo.SelectInfo.HasManyNavigation }; ExpressionVisitorBase visitor = new JoinExpressionVisitor(this, aliases, dQueryInfo.SelectInfo.Joins); visitor.Write(cmd2.JoinFragment); visitor = new WhereExpressionVisitor(this, aliases, dQueryInfo.SelectInfo.WhereExpression); visitor.Write(cmd2.WhereFragment); cmd2.AddNavMembers(visitor.NavMembers); builder.Append(cmd2.CommandText); } builder.Append(';'); return(new Command(builder.ToString(), builder.Token != null ? builder.Token.Parameters : null, System.Data.CommandType.Text)); }
// 创建 INSRT 命令 protected override Command ParseInsertCommand <T>(DbQueryableInfo_Insert <T> nQueryInfo, ParserToken token) { ISqlBuilder builder = this.CreateSqlBuilder(token); TypeRuntimeInfo typeRuntime = TypeRuntimeInfoCache.GetRuntimeInfo <T>(); TableAliasCache aliases = new TableAliasCache(); if (nQueryInfo.Entity != null) { object entity = nQueryInfo.Entity; ISqlBuilder columnsBuilder = this.CreateSqlBuilder(token); ISqlBuilder valuesBuilder = this.CreateSqlBuilder(token); // 指定插入列 Dictionary <string, MemberInvokerBase> invokers = typeRuntime.Invokers; if (nQueryInfo.EntityColumns != null && nQueryInfo.EntityColumns.Count > 0) { invokers = new Dictionary <string, MemberInvokerBase>(); for (int i = 0; i < nQueryInfo.EntityColumns.Count; i++) { Expression curExpr = nQueryInfo.EntityColumns[i]; if (curExpr.NodeType == ExpressionType.Lambda) { curExpr = (curExpr as LambdaExpression).Body.ReduceUnary(); } if (curExpr.NodeType != ExpressionType.MemberAccess) { throw new XFrameworkException("Can't read field name from expression {0}", nQueryInfo.EntityColumns[i]); } MemberExpression member = curExpr as MemberExpression; string name = member.Member.Name; invokers[name] = typeRuntime.Invokers[name]; } } foreach (var kv in invokers) { MemberInvokerBase invoker = kv.Value; var column = invoker.Column; if (column != null && column.NoMapped) { continue; } if (invoker.ForeignKey != null) { continue; } if (invoker.Member.MemberType == System.Reflection.MemberTypes.Method) { continue; } if (invoker != nQueryInfo.AutoIncrement) { columnsBuilder.AppendMember(invoker.Member.Name); columnsBuilder.Append(','); var value = invoker.Invoke(entity); string seg = builder.GetSqlValueWidthDefault(value, column); valuesBuilder.Append(seg); valuesBuilder.Append(','); } } columnsBuilder.Length -= 1; valuesBuilder.Length -= 1; if (nQueryInfo.Bulk == null || !nQueryInfo.Bulk.OnlyValue) { builder.Append("INSERT INTO "); builder.AppendMember(typeRuntime.TableName, !typeRuntime.IsTemporary); builder.Append('('); builder.Append(columnsBuilder); builder.Append(')'); builder.AppendNewLine(); builder.AppendNewTab(); builder.Append("VALUES"); } if (nQueryInfo.Bulk != null && nQueryInfo.Bulk.OnlyValue) { builder.AppendNewTab(); } builder.Append('('); builder.Append(valuesBuilder); builder.Append(')'); if (nQueryInfo.Bulk != null && !nQueryInfo.Bulk.IsEndPos) { builder.Append(","); builder.AppendNewLine(); } if (nQueryInfo.Bulk == null && nQueryInfo.AutoIncrement != null) { builder.Append(';'); builder.AppendNewLine(); builder.Append("SELECT LAST_INSERT_ID()"); builder.AppendAs(Constant.AUTOINCREMENTNAME); } } else if (nQueryInfo.SelectInfo != null) { builder.Append("INSERT INTO "); builder.AppendMember(typeRuntime.TableName, !typeRuntime.IsTemporary); builder.Append('('); int i = 0; SelectCommand cmd2 = this.ParseSelectCommandImpl(nQueryInfo.SelectInfo, 0, true, token) as SelectCommand; foreach (var kvp in cmd2.Columns) { builder.AppendMember(kvp.Key); if (i < cmd2.Columns.Count - 1) { builder.Append(','); } i++; } builder.Append(')'); builder.AppendNewLine(); builder.Append(cmd2.CommandText); } if (nQueryInfo.Bulk == null || nQueryInfo.Bulk.IsEndPos) { builder.Append(';'); } return(new Command(builder.ToString(), builder.Token != null ? builder.Token.Parameters : null, System.Data.CommandType.Text)); }
// 创建 SELECT 命令 Command ParseSelectCommandImpl <T>(DbQueryableInfo_Select <T> sQueryInfo, int indent, bool isOuter, ParserToken token) { // 说明: // 1.OFFSET 前必须要有 'ORDER BY',即 'Skip' 子句前必须使用 'OrderBy' 子句 // 2.在有统计函数的<MAX,MIN...>情况下,如果有 'Distinct' 'GroupBy' 'Skip' 'Take' 子句,则需要使用嵌套查询 // 3.'Any' 子句将翻译成 IF EXISTS... // 4.分组再分页时需要使用嵌套查询,此时子查询不需要 'OrderBy' 子句,但最外层则需要 // 5.'Skip' 'Take' 子句视为语义结束符,在其之后的子句将使用嵌套查询 // 6.导航属性中有 1:n 关系的,需要使用嵌套查询,否则分页查询会有问题 // 8.如果只有 Skip 没有 Take,则使用 Row_Number() Over()分页语法,其它使用 LIMIT ## OFFSET 语法 // 导航属性中有1:n关系,只统计主表 // 例:AccountList = a.Client.AccountList, DbQueryableInfo_Select <T> subQuery = sQueryInfo.SubQueryInfo as DbQueryableInfo_Select <T>; if (sQueryInfo.HasManyNavigation && subQuery != null && subQuery.StatisExpression != null) { sQueryInfo = subQuery; } bool useStatis = sQueryInfo.StatisExpression != null; // 没有统计函数或者使用 'Skip' 子句,则解析OrderBy // 导航属性如果使用嵌套,除非有 TOP 或者 OFFSET 子句,否则不能用ORDER BY string alias0 = token != null && !string.IsNullOrEmpty(token.TableAliasName) ? (token.TableAliasName + "0") : "t0"; bool useSubQuery = sQueryInfo.HaveDistinct || sQueryInfo.GroupByExpression != null || sQueryInfo.Skip > 0 || sQueryInfo.Take > 0; bool useOrderBy = (!useStatis || sQueryInfo.Skip > 0) && !sQueryInfo.HaveAny && (!sQueryInfo.ResultByManyNavigation || (sQueryInfo.Skip > 0 || sQueryInfo.Take > 0)); IDbQueryable dbQueryable = sQueryInfo.SourceQuery; TableAliasCache aliases = this.PrepareAlias <T>(sQueryInfo, token); SelectCommand cmd = new SelectCommand(this, aliases, token) { HasManyNavigation = sQueryInfo.HasManyNavigation }; ISqlBuilder jf = cmd.JoinFragment; ISqlBuilder wf = cmd.WhereFragment; ISqlBuilder sf = null; jf.Indent = indent; #region 嵌套查询 if (useStatis && useSubQuery) { // SELECT jf.Append("SELECT "); jf.AppendNewLine(); // SELECT COUNT(1) var visitor2 = new StatisExpressionVisitor(this, aliases, sQueryInfo.StatisExpression, sQueryInfo.GroupByExpression, alias0); visitor2.Write(jf); cmd.AddNavMembers(visitor2.NavMembers); // SELECT COUNT(1) FROM jf.AppendNewLine(); jf.Append("FROM ( "); indent += 1; jf.Indent = indent; } #endregion #region 择子句 // SELECT 子句 if (jf.Indent > 0) { jf.AppendNewLine(); } jf.Append("SELECT "); if (sQueryInfo.HaveAny) { jf.Append("CASE WHEN COUNT(1) = 1 THEN 1 ELSE 0 END FROM ("); indent += 1; jf.Indent = indent; jf.AppendNewLine(); jf.Append("SELECT 1 "); } if (useStatis && !useSubQuery) { // 如果有统计函数,并且不是嵌套的话,则直接使用SELECT <MAX,MIN...>,不需要解析选择的字段 jf.AppendNewLine(); var visitor2 = new StatisExpressionVisitor(this, aliases, sQueryInfo.StatisExpression, sQueryInfo.GroupByExpression); visitor2.Write(jf); cmd.AddNavMembers(visitor2.NavMembers); } else { // DISTINCT 子句 if (sQueryInfo.HaveDistinct) { jf.Append("DISTINCT "); } #region 择字段 if (!sQueryInfo.HaveAny) { // SELECT 范围 var visitor2 = new ColumnExpressionVisitor(this, aliases, sQueryInfo); if (sQueryInfo.Skip > 0 && sQueryInfo.Take == 0) { sf = this.CreateSqlBuilder(token); sf.Indent = jf.Indent + 1; visitor2.Write(sf); } else { visitor2.Write(jf); } cmd.Columns = visitor2.Columns; cmd.Navigations = visitor2.Navigations; cmd.AddNavMembers(visitor2.NavMembers); if (sf != null) { // 第一层嵌套 int index = 0; jf.AppendNewLine(); foreach (var entry in cmd.Columns) { jf.AppendMember(alias0, entry.Key); jf.AppendAs(entry.Key); index += 1; if (index < cmd.Columns.Count) { jf.Append(','); jf.AppendNewLine(); } } jf.AppendNewLine(); jf.Append("FROM("); // 第二层嵌套 indent += 1; jf.Indent = indent; jf.AppendNewLine(); jf.Append("SELECT"); jf.Append(sf); jf.Append(','); jf.AppendNewLine(); if (sQueryInfo.OrderBys.Count == 0) { throw new XFrameworkException("The method 'OrderBy' must be called before 'Skip'."); } jf.Append("ROW_NUMBER() OVER("); var visitor3 = new OrderByExpressionVisitor(this, aliases, sQueryInfo.OrderBys, sQueryInfo.GroupByExpression); visitor3.Write(jf, false); cmd.AddNavMembers(visitor3.NavMembers); jf.Append(") Row_Number0"); } } #endregion } #endregion #region 顺序解析 // FROM 子句 jf.AppendNewLine(); jf.Append("FROM "); if (sQueryInfo.SubQueryInfo != null) { // 子查询 jf.Append("("); var cmd2 = this.ParseSelectCommandImpl <T>(sQueryInfo.SubQueryInfo as DbQueryableInfo_Select <T>, indent + 1, false, token); jf.Append(cmd2.CommandText); jf.AppendNewLine(); jf.Append(") "); jf.Append(alias0); jf.Append(' '); } else { var typeRuntime = TypeRuntimeInfoCache.GetRuntimeInfo(sQueryInfo.FromType); jf.AppendMember(typeRuntime.TableName, !typeRuntime.IsTemporary); jf.Append(' '); jf.Append(alias0); jf.Append(' '); } // LEFT<INNER> JOIN 子句 ExpressionVisitorBase visitor = new JoinExpressionVisitor(this, aliases, sQueryInfo.Joins); visitor.Write(jf); wf.Indent = jf.Indent; // WHERE 子句 visitor = new WhereExpressionVisitor(this, aliases, sQueryInfo.WhereExpression); visitor.Write(wf); cmd.AddNavMembers(visitor.NavMembers); // GROUP BY 子句 visitor = new GroupByExpressionVisitor(this, aliases, sQueryInfo.GroupByExpression); visitor.Write(wf); cmd.AddNavMembers(visitor.NavMembers); // HAVING 子句 visitor = new HavingExpressionVisitor(this, aliases, sQueryInfo.HavingExpression, sQueryInfo.GroupByExpression); visitor.Write(wf); cmd.AddNavMembers(visitor.NavMembers); // ORDER 子句 if (sQueryInfo.OrderBys.Count > 0 && useOrderBy)// && !groupByPaging) { visitor = new OrderByExpressionVisitor(this, aliases, sQueryInfo.OrderBys, sQueryInfo.GroupByExpression); visitor.Write(wf); cmd.AddNavMembers(visitor.NavMembers); } #endregion #region 分页查询 // LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。 // LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 // 初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。 // Limit n,-1 语法不支持,使用ROW_Number()语法代替 if (sQueryInfo.Take > 0) { wf.AppendNewLine().AppendFormat("LIMIT {0}", wf.GetSqlValue(sQueryInfo.Take)); wf.AppendFormat(" OFFSET {0}", wf.GetSqlValue(sQueryInfo.Skip)); } #endregion #region 嵌套查询 if (useStatis && useSubQuery) { cmd.Convergence(); indent -= 1; jf.Indent = indent; jf.AppendNewLine(); jf.Append(") "); jf.Append(alias0); } #endregion #region 嵌套导航 // TODO Include 从表,没分页,OrderBy 报错 if (sQueryInfo.HasManyNavigation && subQuery != null && subQuery.OrderBys.Count > 0 && subQuery.StatisExpression == null && !(subQuery.Skip > 0 || subQuery.Take > 0)) { cmd.Convergence(); visitor = new OrderByExpressionVisitor(this, aliases, subQuery.OrderBys);//, null, "t0"); visitor.Write(jf); } #endregion #region 并集查询 // UNION 子句 if (sQueryInfo.Unions != null && sQueryInfo.Unions.Count > 0) { cmd.Convergence(); for (int index = 0; index < sQueryInfo.Unions.Count; index++) { jf.AppendNewLine(); jf.Append("UNION ALL"); if (indent == 0) { jf.AppendNewLine(); } Command cmd2 = this.ParseSelectCommandImpl <T>(sQueryInfo.Unions[index] as DbQueryableInfo_Select <T>, indent, isOuter, token); jf.Append(cmd2.CommandText); } } #endregion #region 分页查询 if (sf != null) { // 合并 WHERE cmd.Convergence(); indent -= 1; jf.Indent = indent; jf.AppendNewLine(); jf.Append(") "); jf.Append(alias0); jf.AppendNewLine(); jf.Append("WHERE "); if (sQueryInfo.Skip > 0) { jf.AppendMember(alias0, "Row_Number0"); jf.Append(" > "); jf.Append(jf.GetSqlValue(sQueryInfo.Skip)); } } #endregion #region Any 子句 // 'Any' 子句 if (sQueryInfo.HaveAny) { // 产生 WHERE 子句 cmd.Convergence(); // 如果没有分页,则显式指定只查一笔记录 if (sQueryInfo.Take == 0 && sQueryInfo.Skip == 0) { jf.AppendNewLine(); jf.Append("LIMIT 0,1"); } indent -= 1; jf.Indent = indent; jf.AppendNewLine(); jf.Append(") "); jf.Append(alias0); } #endregion return(cmd); }
// 创建 SELECT 命令 protected override Command ParseSelectCommand <T>(DbQueryableInfo_Select <T> sQueryInfo, int indent, bool isOuter, ParserToken token) { var cmd = (SelectCommand)this.ParseSelectCommandImpl(sQueryInfo, indent, isOuter, token); cmd.Convergence(); if (isOuter) { cmd.JoinFragment.Append(';'); } return(cmd); }
public NumberLiteralExpression(ILocation location, ParserToken token) : base(location) { if (token == null) { throw new ArgumentNullException("token"); } string literal = token.Token; bool binary = token.Token.EndsWith("#"); if (binary) { literal = literal.Substring(0, literal.Length - 1); } if (!binary) { float_ = token.Token.Contains(".") || token.Token.Contains("e") || token.Token.Contains("E"); } else { float_ = false; } if (float_) { double val; try { val = double.Parse(literal, CultureInfo.InvariantCulture); } catch { throw new CompilerException(location, "Failed to parse number literal as double. " + literal); } if ((val < float.MinValue) || (val > float.MaxValue)) { throw new CompilerException(location, "Number literal out of range for float. " + literal); } floatVal = (float)val; } else { long val; try { val = long.Parse(literal, CultureInfo.InvariantCulture); } catch { throw new CompilerException(location, "Failed to parse number literal as integer. " + literal); } if (binary) { if ((val > int.MaxValue) && (val <= uint.MaxValue)) { val = -1 + (val - uint.MaxValue); } } if ((val < int.MinValue) || (val > int.MaxValue)) { throw new CompilerException(location, "Number literal out of range for integer. " + literal); } value = (int)val; } }
internal JsonException(ParserToken token) : base(String.Format( "Invalid token '{0}' in input string", (char)token)) { }
private static void TableAddCol(ParserToken row, int col, params int[] symbols) { (parse_table[(int) row] as IDictionary).Add(col, symbols); }
/// <summary> /// 创建 SQL 构造器 /// </summary> /// <param name="token">参数列表,NULL 或者 parameter=NULL 时表示不使用参数化</param> /// <returns></returns> public override ISqlBuilder CreateSqlBuilder(ParserToken token) { return(new MySqlBuilder(this, token)); }
private static void TableAddCol(ParserToken row, int col, params int[] symbols) { parse_table[(int) row].Add (col, symbols); }
public async Task StartMessageListener() { try { while (true) { await ReadMessage(Cancellation.Token); string.Format( "{0} received message {1}", GetID(), Command) .Log(LogFile); switch (Command) { case "ping": await SendMessage(new PongMessage( BitConverter.ToUInt64(Payload, 0))); break; case "addr": AddressMessage addressMessage = new AddressMessage(Payload); break; case "sendheaders": await SendMessage(new SendHeadersMessage()); break; case "feefilter": FeeFilterMessage feeFilterMessage = new FeeFilterMessage(Payload); FeeFilterValue = feeFilterMessage.FeeFilterValue; break; case "block": byte[] blockBytes = Payload .Take(PayloadLength) .ToArray(); Block block = ParserToken.ParseBlock(blockBytes); if (IsStateIdle()) { string.Format( "{0}: Receives unsolicited block {1}.", GetID(), block.Header.Hash.ToHexString()) .Log(LogFile); Console.Beep(); if (!Blockchain.TryLock()) { break; } try { ProcessHeaderUnsolicited( block.Header, out bool flagHeaderExtendsChain); if (flagHeaderExtendsChain) { if (!Blockchain.TryInsertBlock( block, flagValidateHeader: true)) { // Blockchain insert sollte doch einfach Ex. schmeissen } } } catch (Exception ex) { Blockchain.ReleaseLock(); throw ex; } Blockchain.ReleaseLock(); } else if (IsStateAwaitingBlockDownload()) { BlockDownload.InsertBlock(block); if (BlockDownload.IsDownloadCompleted) { SignalProtocolTaskCompleted.Post(true); lock (LOCK_StateProtocol) { State = StateProtocol.IDLE; } break; } Cancellation.CancelAfter( TIMEOUT_RESPONSE_MILLISECONDS); } break; case "headers": Header header = null; int index = 0; int countHeaders = VarInt.GetInt32( Payload, ref index); string.Format( "{0}: Receiving {1} headers.", GetID(), countHeaders) .Log(LogFile); if (IsStateIdle()) { header = Token.ParseHeader( Payload, ref index); string.Format( "Received unsolicited header {0}", header.Hash.ToHexString()) .Log(LogFile); index += 1; if (!Blockchain.TryLock()) { break; } try { ProcessHeaderUnsolicited( header, out bool flagHeaderExtendsChain); if (flagHeaderExtendsChain) { List <Inventory> inventories = new() { new Inventory( InventoryType.MSG_BLOCK, header.Hash) }; SendMessage(new GetDataMessage(inventories)); } } catch (Exception ex) { Blockchain.ReleaseLock(); throw ex; } Blockchain.ReleaseLock(); } else if (IsStateGetHeaders()) { if (countHeaders > 0) { while (index < PayloadLength) { header = Token.ParseHeader( Payload, ref index); index += 1; HeaderDownload.InsertHeader(header, Token); } } SignalProtocolTaskCompleted.Post(true); } break; case "notfound": Debug.WriteLine( "Command notfound not implemented yet."); break; case "inv": var invMessage = new InvMessage(Payload); var getDataMessage = new GetDataMessage( invMessage.Inventories); break; case "getdata": getDataMessage = new GetDataMessage(Payload); foreach (Inventory inventory in getDataMessage.Inventories) { if (inventory.Type == InventoryType.MSG_TX) { if (Token.TryRequestTX( inventory.Hash, out byte[] tXRaw))
internal JsonException(ParserToken token, #if true // for BACKENDLESS System.Exception inner_exception) :
public DocDeclaration(ILocation location, ParserToken text) { }
private IEnumerable <IRoutePatternPart> Parse() { for (var i = 0; i <= _input.Length; i++) { var c = i == _input.Length ? '\0' : _input[i]; switch (_currentToken) { case ParserToken.BeginPart: CannotBeEndOfString(c); switch (c) { case '\\': _currentToken = ParserToken.EscapeInExactPart; break; case '{': _currentToken = ParserToken.NamedPartLeftBody; break; default: _currentLeftPart.Append(c); _currentToken = ParserToken.ExactPartBody; break; } break; case ParserToken.ExactPartBody: switch (c) { case '\\': _currentToken = ParserToken.EscapeInExactPart; break; case ':': case '\0': yield return(new ExactRoutePatternPart(_currentLeftPart.ToString())); Reset(); break; default: _currentLeftPart.Append(c); break; } break; case ParserToken.NamedPartLeftBody: CannotBeEndOfString(c); switch (c) { case '\\': _currentToken = ParserToken.EscapeInNamedLeftPart; break; case ':': _currentToken = ParserToken.NamedPartRigthBody; break; case '}': _currentToken = ParserToken.CompleteNamedPart; break; default: _currentLeftPart.Append(c); break; } break; case ParserToken.NamedPartRigthBody: CannotBeEndOfString(c); switch (c) { case '\\': _currentToken = ParserToken.EscapeInNamedRightPart; break; case '}': _currentToken = ParserToken.CompleteNamedPart; break; default: _currentRightPart.Append(c); break; } break; case ParserToken.CompleteNamedPart: if (c == ':' || c == '\0') { yield return(CreateNamedPart()); Reset(); } else { throw new AggregateException($"Illegal symbol {c} after named part"); } break; case ParserToken.EscapeInExactPart: CannotBeEndOfString(c); _currentLeftPart.Append(c); _currentToken = ParserToken.ExactPartBody; break; case ParserToken.EscapeInNamedLeftPart: CannotBeEndOfString(c); _currentLeftPart.Append(c); _currentToken = ParserToken.NamedPartLeftBody; break; case ParserToken.EscapeInNamedRightPart: CannotBeEndOfString(c); _currentRightPart.Append(c); _currentToken = ParserToken.NamedPartRigthBody; break; default: throw new InvalidOperationException("Unknown token " + _currentToken); } } }
private static void TableAddCol(IDictionary<int, IDictionary<int, int[]>> parse_table, ParserToken row, int col, params int[] symbols) { parse_table[(int) row].Add (col, symbols); }
internal JsonException(ParserToken token, Exception inner_exception) : base($"Invalid token '{token}' in input string", inner_exception) { }
public override void Apply(ParserToken parser) { CreateNode(parser.Token); }
private static void TableAddCol(ParserToken row, int col, params int[] symbols) { parse_table[(int)row].Add(col, symbols); }
public abstract void Apply(ParserToken parser);
private static void TableAddRow(IDictionary <int, IDictionary <int, int[]> > parse_table, ParserToken rule) { parse_table.Add((int)rule, new Dictionary <int, int[]>()); }
private static void TableAddRow(ParserToken rule) { _parseTable.Add((int)rule, new Dictionary <int, int[]>()); }
private static void TableAddRow(ParserToken rule) { JsonReader.parse_table.Add((int)rule, new Hashtable()); }
public ParserAction(ParserToken token, IList <Expression> related, params Line[] lines) { Token = token; RelatedLines = lines.ToList(); Related = related.ToList(); }
internal JsonException(ParserToken token) : base(System.String.Format( "Invalid token '{0}' in input string", token)) { }
public ParserAction(ParserToken token, IList <Line> lines, params Expression[] related) { RelatedLines = lines.ToList(); Token = token; Related = related.ToList(); }
private static void TableAddRow(ParserToken rule) { parse_table.Add ((int) rule, new Hashtable()); }
private static void TableAddCol(ParserToken row, int col, params int[] symbols) { JsonReader.parse_table.get_Item((int)row).Add(col, symbols); }
private static void TableAddRow(ParserToken rule) { JsonReader.parse_table.Add((int)rule, new Dictionary <int, int[]>()); }
internal JsonException(ParserToken token, Exception inner_exception) : base(string.Format("╩С╚вОоич┤«ол░Ч║г╬ялДх─┴Ь┼к '{0}' БА", token), inner_exception) { }
private static void TableAddRow(ParserToken rule) { parse_table.Add ((int) rule, new Dictionary<int, int[]> ()); }
internal JsonException (ParserToken token, #if true // for BACKENDLESS System.Exception inner_exception) :