ImitateLogin新增插件机制以及又一个社交网站的支持

我的文章里已经多次介绍 imitate-login ,这是我最近一直在维护的一个使用c#模拟社交网站登录的开源项目,现在新增了对插件的支持以及一个新的网站(由于某种原因,会在文章结束部分介绍;而且仅会出现在博客中)。希望喜欢的读者可以通过 Star & fork 来支持我,我也会据此来决定时间的分配。

imitate-login 现在已经提供了对插件的支持;目前有两个部分使用到了插件机制,登录自身实现以及登录过程中的验证码识别过程;其中登录过程仅支持 MEF(Managed Extensibility Framework)模式,而验证码识别过程支持 Thrift RPC (Apache Thrift)、HTTP RESTful (POST/GET)、MEF 三种方式。下面将介绍这三种插件的开发与配置方式,所有代码均已经在 Extensions 。

Thrift RPC



在 Imitate Login 的库中有通过 Thrift 文件生成的类 ThriftOperation,如果你使用其它语言开发,请通过 Thrift 生成对应的类,下面将介绍使用C#来开发插件。

首先,创建一个控制台应用程序,新增一个类继承 ThriftOperation.Iface 并实现,这里直接 return 一下:

class demo : ThriftOperation.Iface
{
    public string Operation(OperationObj operationObj)
    {
        return "1234";
    }
}

然后在主函数里增加一个创建 Thrift 服务端得方法:

static void Main(string[] args)
{
    int port = 7801;

    string str = ConfigurationManager.AppSettings["ServerPort"];
    if (!string.IsNullOrEmpty(str))
        int.TryParse(str, out port);

    if (args != null && args.Length == 1)
    {
        int.TryParse(args[0], out port);
    }

    Start(port);
}

public static void Start(int port)
{
    TServerSocket serverTransport = new TServerSocket(port, 0, false);
    ThriftOperation.Processor processor = new ThriftOperation.Processor(new demo());
    TServer server = new TSimpleServer(processor, serverTransport);
    Console.WriteLine("Starting server on port {0} ...", port);
    server.Serve();
}

在使用时,你需要先启动该插件程序,然后将下面配置部分合并放到程序运行目录的 extension.conf 文件:

{
    "ExtendType": 3,
    "SupportSite": [2],
    "Path": null,
    "Host": "127.0.0.1",
    "Port": 7801,
    "UrlFormat": null,
    "HttpMethod": null
}

你可以使用 PluginConfigBuild 工具来生成配置文件,此处不再解释具体细节。

HTTP RESTful



另外一种插件方式即使用通用的 Http RESTful API 来实现,如果通过 GET 方法,你仅能传入一个枚举用来表明网站以及一个字符串作为参数;如果你通过 POST 方法,需要通过 Thrift 获得一个 OperationObj 类的定义,当然 C# 可以通过直接引用 imitate-login 库来获得。API 的编写方法不再累述,接下来你需要将以下配置部分合并放到程序运行目录的 extension.conf 文件:

{
    "ExtendType": 2,
    "SupportSite": [6],
    "Path": null,
    "Host": null,
    "Port": 0,
    "UrlFormat": "http://localhost:2920/Mail/SendMail?loginSite={0}&imageUrl={1}",
    "HttpMethod": "GET"
}

MEF



MEF 是微软在 .NET 4.0 以后原生提供的一种插件模式;使用该方法需要用到 IMEFOperation 类,你需要通过引用 imitate-login 得到,demo 代码如下:

[Export(typeof(IMEFOperation))]
[ExportMetadata("loginSite", LoginSite.Baidu)]
public class demo : IMEFOperation
{
    public string Operate(string imageUrl = "", Image image = null, params string[] param)
    {
        return "1234";
    }
}

这种方式需要在配置文件中指定插件的存放位置,位置支持相对运行目录或绝对目录;本例为将该插件生成的 dll 拷贝到程序运行目录下的 Extensions 目录中,配置文件如下:

{
    "ExtendType": 1,
    "SupportSite": [5, 1],
    "Path": "Extensions",
    "Host": null,
    "Port": 0,
    "UrlFormat": null,
    "HttpMethod": null
}

所有的配置文件均可以通过 PluginConfigBuild 工具来生成,其中 SupportSite 为支持的登录网站的枚举数组。

好了,接下来需要什么自己动手试试吧!

部分内容将仅在个人博客中展示,请查看原文网址!

本文来自 The NewIdea,作者 Carey Tzou 。
原文地址:http://www.tnidea.com/imitate-login-support-plugin-now.html
未经授权,拒绝任何全文及摘要转载!

时间: 2024-08-10 14:04:39

ImitateLogin新增插件机制以及又一个社交网站的支持的相关文章

搭建SVN,部署社交网站

概述: 社交网站的第一个版本部署在LNMP平台之上,前段为Nginx服务器,通过fastcgi协议访问后端的PHP服务器.为了保证数据安全,要求搭建MySQL数据库主从集群. 项目介绍: 本项目案例结合SVN.LNMP和MySQL三种环境,部署一个社交网站,本社交网站采用PHP语言开发,搭建SVN服务器进行版本控制和集中管理PHP程序员开发的代码,以Nginx作为前端服务器,通过fastcgi协议访问后端的PHP服务器,调用PHP页面:为保证数据安全,搭建MySQL主从复制环境存储用户重要数据:

基于接口的插件机制

一.前言 插件,意味着可扩展,且宿主程序不依赖于插件,即插即用.这种软件设计方式可以使我们的应用程序最大化地获得可扩展性.适应性和稳定性,而且便于软件的维护和升级.在什么场景下使用插件呢?例如在本篇文章中,我个人有一个小需求就是希望记事本带行号,于是我自己写了一个极简易的编辑器(CodeEditor),以这个编辑器为例,主体程序功能包括常见的新建.复制.查找.保存等已经完成,但是在使用的过程中发现需要用到 格式化 这个功能,但是我还不想再去改主程序,这种情形下就可以通过插件来实现,这样以后在使用

koahub.js 0.09 发布,新增钩子机制

koahubjs发布0.09 新增钩子机制添加钩子机制,控制器钩子和函数钩子修复自动加载bug,实现除自动加载导出的default外,还能自动加载其他的方法记koahubjs钩子开发过程在使用koahubjs开发项目完成之后,总是需要另外增加一些插件功能,这种情况下改动项目代码,风险太大,所以钩子机制不可缺少.koahubjs将钩子加载到了内存中,原因是因为koahubjs框架并没有内置数据库,而且加载到内存中更加灵活.钩子1控制器钩子执行某个http请求的时候,想要调用另外一个控制器的方法钩子

php中的钩子(hook插件机制)

对"钩子"这个概念其实不熟悉,最近看到一个php框架中用到这种机制来扩展项目,所以大概来了解下. hook插件机制的基本思想: 在项目代码中,你认为要扩展(暂时不扩展)的地方放置一个钩子函数,等需要扩展的时候,把需要实现的类和函数挂载到这个钩子上,就可以实现扩展了. 思想就是这样听起来比较笼统,看一个网上的实现的例子. 整个插件机制包含三个部分: 1.hook插件经理类:这个是核心文件,是一个应用程序全局Global对象.它主要有三个职责 1>监听已经注册了的所有插件,并实例化这

xadmin的插件机制

xadmin的视图方法中如果加了@filter_hook 标记的都可以作为插件的钩子函数. 例如在ListAdminView类中有许多加了上述标记的方法, @filter_hook def get_context(self): """ Prepare the context for templates. """ self.title = _('%s List') % force_unicode(self.opts.verbose_name) mo

[转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造

很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框架,可以参照<WorldWind学习系列五:插件加载过程全解析>,下面与大家分享一下. 初始化时,加载前面两个插件,可以动态加载KeyBoarderLoader,如下图: 该插件框架是WW插件框架的精简改造版,非常适用于插件式系统开发,也希望帮助大家学习一下WW的插件加载机制. 缺陷在于:未实现事

分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. 1 设计思路 首先,我来说明一下设计思路.我们先来看看目前OSGi.NET插件框架的服务.在这里,服务不是远程服务,它是轻量级的服务,由接口和实现类组成,如下图所示.服务契约插件定义了服务接口,服务实现插件向服务总线注册服务,服务调用插件利用服务契约(接口)从服务总线获取实现的服务并调用,服务实现

行为扩展以及插件机制

在thinkPHP中的行为扩展和插件机制. 首先行为扩展这个概念是TP框架的核心组成之一,关于行为的解释我就粗略的概括一下吧: TP在从接受到HTTP请求到最终将试图输出,期间经历的很多步骤,这些步骤大家可以在http://document.thinkphp.cn/manual_3_2.html#system_process这里面看到. 那么行为扩展实际上就是在这些流程里面买下了一个钩子,你可以往钩子里添加你自己的业务逻辑 当程序执行到某些钩子位置时将自动触发你的业务逻辑,http://docu

winform插件机制学习

这两天在看自定义控件,原来有太多知识没有掌握.今天看到插件机制,心里突然一亮,这个东西听了不少次,就是不知道是啥回事.这次有幸书里包含一个案例,我就跟着它一步步来.终于知道是什么回事了.这个应该在软件开发中非常多见.只是当时不理解罢了. 开始 新建一个winform项目CustomControls在窗体上放一个button按钮 窗体代码 using System;using System.Collections.Generic;using System.ComponentModel;using