C#制作一个消息拦截器(intercept)3

之前为InterceptAttribute的上下文环境添加了“Intercept”属性(InterceptProperty),正因为InterceptProperty继承了IContributeObjectSink,所以我们要实现GetObjectSink(),继而我们要创建一个继承ImessageSink的类来作为返回值。

这样就引发出了InterceptSink类的实现:

public class InterceptSink : IMessageSink
    {
        private IMessageSink nextSink = null;
        public IMessageSink NextSink
        {
            get { return nextSink; }
        }
        public InterceptSink(IMessageSink nextSink)
        {
            Console.WriteLine(" Call 'InterceptSink' - 'Constructor'  ");
            this.nextSink = nextSink;
        }

        public IMessage SyncProcessMessage(IMessage msg)
        {

            Console.WriteLine("method_name: " + msg.Properties["__MethodName"].ToString());
            IMessage returnMsg = nextSink.SyncProcessMessage(msg);
            return returnMsg;
        }
        public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
        {
            return null;
        }
    }

核心方法是:SyncProcessMessage(Imessage msg)

传入参数msg中,我们可以找到调用对象方法的相应数据。

C#制作一个消息拦截器(intercept)3

时间: 2024-10-12 02:48:19

C#制作一个消息拦截器(intercept)3的相关文章

C#制作一个消息拦截器(intercept)1

首先,我们先要制作一个自定义Attribute,让他可以具有上下文读取功能,所以我们这个Attribute类要同时继承Attribute和IContextAttribute. 接口IContextAttribute中有两个方法需要实现 1.bool   IsContextOK(Context ctx, IConstructionCallMessage msg); 2.void  GetPropertiesForNewContext(IConstructionCallMessage msg); 简

C#制作一个消息拦截器(intercept)4

ok,我们拦截器基本构造完成,接下来我来告诉大家如何去使用. 注意一个问题,object拦截器我们要拦截什么,那么我们就要在需要拦截的类上面做手脚了. 首先,创建我们需要被拦截的类. 然后,我们再对类进行相应的包装: 1.该类要标记InterceptAttribute属性 2.该类要继承ContextBoundObject,只有继承ContextBoundObject的类,vs才能知道该类需要访问Context,这样标记的InterceptAttribute才有效. /// <summary>

openfire开发(四)消息拦截器

大家好,我是LD,今天给大家介绍openfire的消息拦截器.通常,我们在开发插件的过程中会有一种需求,需要对客户端发送的消息来做一些我们自己的处理,比如保存数据等等.这里我们就会使用到拦截器, 在openfire中,自定义拦截器需要实现PacketInterceptor接口.下面我们写一个简单的拦截器来介绍一下. import org.jivesoftware.openfire.interceptor.PacketInterceptor; import org.jivesoftware.ope

开发openfire 消息拦截器插件PacketInterceptor

开发消息拦截器的步骤跟开发简单插件步骤一样,要开发消息拦截器插件,首先继承PacketInterceptor包拦截类,然后在initializelPlugin()方法中注册拦截器,就可以实现interceptPackage()方法中拦截包(即此方法中的packet参数)了.并且,可以通过入参incoming来判断是服务器发送的包还是接受的包(注:true为服务器接收的包:false为发出的包).processed参数用处暂不明,猜想是对请求做了什么处理的标识,但不影响我们对包进行拦截和处理. 这

Struts 2知识回顾----拦截器(Intercept)总结

什么是Struts 2拦截器? 从软件构架上来说,拦截器是实现了面向方面编程的组件.它将影响了多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现功能的高度内聚,确保了业务对象的整洁和纯度. 从Java代码上来说,它就是一个普度的Java对象,它只需要实现一个名为Interceptor的接口. 为什么要使用拦截器? 拦截器消除了动作组件中的横切任务(cross-cutting task).例如,日志记录是一个典型的横切关注.以前,我们可能需要为每个动作组件准备一些记录日志的

【spring-boot】spring-boot项目中,通过thymleaf实现登录功能,这里是一个登录拦截器的参考代码

我们在实现网页登录操作时,需要对网页进行保护(权限控制),将没有没有登录到请求拦截在系统之外,那么这里可以通过一个拦截器实现该功能 以下是LoginHanderInterceptor.java的参考代码: package com.springboot.conponent; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; i

使用Windows Form 制作一个简易资源管理器

自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始添加节点 添加命名空间using System.IO; 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Dra

QT制作一个图片播放器

前言:使用qt制作了一个简单的图片播放器,可以播放gif.png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1.点击图片列表中图片进行播放. 2.自动播放,播放的图片的间隔时间可以自己设定,时间的单位是秒. 3.自动播放的时候再点击图片列表会停止自动播放,保存当前播放的图片的顺序,再次点击自动播放的时候将从当前开始. 4.自动播放到最后一张图片的时候将会停止自动播放,再次点击自动播放的时候将会从第一张图片开始. 先上图看看具体功能: 说完功能我们聊聊制作思路和使用到的

怎么给登录功能设一个访问拦截器

1 <mvc:interceptors> 2 <mvc:interceptor> 3 <mvc:mapping path="/my/cbs/**"/> 4 <mvc:mapping path="/member/**"/> 5 ....... 6 <bean id="loginInterceptor" class="com.jinqiandun.cloud.cp.utility.Log