Ejemplo n.º 1
0
 static IObserver<ISocket> SocketObserver(IKayakFrameworkBehavior behavior)
 {
     return Observer.Create<ISocket>(s =>
         {
             var c = KayakContext.CreateContext(s);
             var process = c.ProcessContext(behavior)
                 .Subscribe(cx =>
                 {
                 },
                 e =>
                 {
                     Console.WriteLine("Error during context.");
                     Console.Out.WriteException(e);
                 },
                 () =>
                 {
                     Console.WriteLine("[{0}] {1} {2} {3} : {4} {5} {6}", DateTime.Now,
                     c.Request.Verb, c.Request.Path, c.Request.HttpVersion,
                     c.Response.HttpVersion, c.Response.StatusCode, c.Response.ReasonPhrase);
                 });
         },
         e =>
         {
             Console.Out.WriteLine("Error from socket source.");
             Console.Out.WriteException(e);
         },
         () => { Console.Out.WriteLine("Socket source completed."); });
 }
Ejemplo n.º 2
0
        static IEnumerable<object> ProcessContextInternal(this IKayakContext context, IKayakFrameworkBehavior behavior)
        {
            yield return context.Request.Begin();

            var info = new InvocationInfo();
            context.SetInvocationInfo(info);

            yield return behavior.Route(context);

            var failed = false;
            var auth = behavior.Authenticate(context);

            if (auth != null)
                yield return auth.Do(r => failed = r);

            if (!failed)
            {
                info.Target = Activator.CreateInstance(info.Method.DeclaringType);

                var parameterCount = info.Method.GetParameters().Length;
                info.Arguments = new object[parameterCount];

                yield return behavior.Bind(context);

                context.PerformInvocation();

                yield return behavior.Handle(context);
            }

            yield return context.Response.End();
        }
Ejemplo n.º 3
0
 static IObservable<Unit> ProcessContext(this IKayakContext context, IKayakFrameworkBehavior behavior)
 {
     return context.ProcessContextInternal(behavior).AsCoroutine<Unit>();
 }
Ejemplo n.º 4
0
 public static IDisposable UseFramework(this IObservable<ISocket> sockets, IKayakFrameworkBehavior behavior)
 {
     return sockets.Subscribe(SocketObserver(behavior));
 }