Example #1
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType <MessageProvider>().As <IMessageProvider>().SingleInstance();
            builder.RegisterType <ProtoMessageSender>().As <IProtoMessageSender>().SingleInstance();
            builder.RegisterType <MessageAttributeHandler>().SingleInstance();
            builder.RegisterBuildCallback(t => t.Resolve <MessageAttributeHandler>().Start());

            builder.RegisterType <ProtoEncoder>();

            builder.RegisterType <MessageFrameEncoder>();
            builder.RegisterType <MessageHeaderDecoder>();
            builder.RegisterInstance(new ProtoMessageCodecHandler(_messageCodecTypes))
            .As <IStartable>()
            .AsSelf()
            .SingleInstance();
            builder.RegisterType <MessageChannelHandler>();

            #region Attribute types
            MessageAttributeHandler.RegisterHandlers(builder);
            #endregion

            #region Decoders
            ProtoMessageCodecHandler.GetExporedTypesForCodec(_messageCodecTypes)
            .ToList()
            .ForEach(type =>
            {
                var descriptor  = (MessageDescriptor)type.GetProperty("Descriptor", BindingFlags.Public | BindingFlags.Static).GetValue(null, null);    // get the static property Descriptor
                var codecExists = descriptor.CustomOptions.TryGetMessage <MessageCodec>(2001, out var messageCodec);
                if (codecExists && !messageCodec.Custom)
                {
                    Type messageHandlerType = typeof(MessageDecoderBase <>).MakeGenericType(type);
                    builder.RegisterType(messageHandlerType)
                    .AsImplementedInterfaces()
                    .SingleInstance();
                }
            });
            base.Load(builder);
            #endregion
        }
Example #2
0
 public ProtoMessageSender(ProtoMessageCodecHandler protoMessageCodecHandler)
 {
     _protoMessageCodecHandler = protoMessageCodecHandler;
 }
 public MessageHeaderDecoder(IMessageDecoder[] messageDecoders, ProtoMessageCodecHandler protoMessageCodecHandler)
 {
     _messageDecoders          = messageDecoders;
     _protoMessageCodecHandler = protoMessageCodecHandler;
 }