public void Begin( string status, IDictionary<string, string> headers ) { var builder = new DelimitedBuilder("\r\n"); var headerBuilder = new HeaderBuilder( headers ); builder.AppendFormat( "HTTP/1.1 {0}", status ); headers.ForEach( x => builder.AppendFormat( "{0}: {1}", x.Key, x.Value ) ); builder.Append( "\r\n" ); var header = builder.ToString(); var headerBuffer = Encoding.UTF8.GetBytes( header ); PendingWrite.Reset(); OnNext( new ArraySegment<byte>(headerBuffer), () => PendingWrite.Set() ); }
private static bool ConstantExpected( DelimitedBuilder builder ) { var symbols = new[] {"{", "TO ", ":", "[", @"\+", @"\-", @"\\", @"\*"}; var temp = builder.ToString(); var last = new string( temp.Skip( temp.Length - 3 ).Take( 3 ).ToArray() ); return symbols.Any( x => last.EndsWith( x ) ); }
private static void ProcessMemberAccess( Expression expr, string prefix, DelimitedBuilder builder ) { var symbols = new[] {"{", "TO ", ":", "[", @"\+", @"\-", @"\\", @"\*"}; var memberExpr = expr as MemberExpression; var temp = builder.ToString(); var last = new string( temp.Skip( temp.Length - 3 ).Take( 3 ).ToArray() ); if ( ConstantExpected( builder ) ) { var memberValue = Expression.Lambda( expr ).Compile().DynamicInvoke(); builder.Append( HandleFormatting( memberValue ) ); } else { var memberName = GetMemberName( memberExpr ); var value = string.IsNullOrEmpty( prefix ) ? memberName : "{0}.{1}".AsFormat( prefix, memberName ); builder.Append( value ); } }