Giter Site home page Giter Site logo

Comments (16)

songtianyi avatar songtianyi commented on July 22, 2024

你的插件加载并激活了不?参照 示例代码main函数里的逻辑。

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

可以看下我写的有啥问题不:
https://github.com/laike9m/WechatShadowClone/blob/master/main.go

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

确认过了,即使不修改跑示例程序也会出现相同警告

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

你的代码 copy之后没有修改。
我改了下提pr到你的项目了。

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

你的 pr 里的代码跑起来没有警告,不过我之前试过直接加一个 wxweb.MSG_INIT 的 handler:

session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "receiver")
session.HandlerRegister.Add(wxweb.MSG_INIT, wxweb.Handler(demo), "receiver")
session.HandlerRegister.Add(wxweb.MSG_IMG, wxweb.Handler(demo), "receiver")

这样是会出现警告的。wxweb.MSG_TEXT 是必须要处理的消息类型,没法省略吧。

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

@laike9m
receiver和之前的重复了,实际上没加成功,你可以打印它的返回值看看。

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

感觉我没看懂那个例子

package demo // 以插件名命令包名

import (
	"github.com/songtianyi/rrframework/logs" // 导入日志包
	"github.com/songtianyi/wechat-go/wxweb"  // 导入协议包
)

// 必须有的插件注册函数
// 指定session, 可以对不同用户注册不同插件
func Register(session *wxweb.Session) {
	// 将插件注册到session
	// 第一个参数: 指定消息类型, 所有该类型的消息都会被转发到此插件
	// 第二个参数: 指定消息处理函数, 消息会进入此函数
	// 第三个参数: 自定义插件名,不能重名,switcher插件会用到此名称
	session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "textdemo")

	// 可以多个消息类型使用同一个处理函数,也可以分开
	session.HandlerRegister.Add(wxweb.MSG_IMG, wxweb.Handler(demo), "imgdemo")
}

这里,插件名叫做 demo,然后下面注释里说 // 第三个参数: 自定义插件名,不能重名,switcher插件会用到此名称.我不是很明白为什么要自定义插件名?以及自定义的插件名和 demo 的关系是啥?

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

@laike9m
有个插件管理接口是通过这个名字来匹配的。其实也可以设计为允许重名,但是管理插件的时候较为混乱。

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

@laike9m
自定义插件名和demo没有联系,demo是函数名,插件名是用来开关插件的。

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

其实我问的是 textdemo, imgdemodemo 这个插件名的关系,这里太 confusing 了

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

或者能不能举个例子,如果要用 demo 这个插件,代码是怎样的?EnableByName 里传的应该是 textdemoimgdemo?

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

@laike9m

package demo // 以插件名命令包名

import (
	"github.com/songtianyi/rrframework/logs" // 导入日志包
	"github.com/songtianyi/wechat-go/wxweb"  // 导入协议包
)

// 必须有的插件注册函数
// 指定session, 可以对不同用户注册不同插件
func Register(session *wxweb.Session) {
	// 将插件注册到session
	// 第一个参数: 指定消息类型, 所有该类型的消息都会被转发到此插件
	// 第二个参数: 指定消息处理函数, 消息会进入此函数
	// 第三个参数: 自定义插件名,不能重名,switcher插件会用到此名称
	session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "textdemo")

	// 可以多个消息类型使用同一个处理函数,也可以分开
	session.HandlerRegister.Add(wxweb.MSG_IMG, wxweb.Handler(demo), "imgdemo")
}

这里实际上在一个插件demo里加了两个handler进去,一个叫 textdemo 一个叫imgdemo,只是它们公用了一个处理函数demo,且写在了同一个插件包里。开关插件(其实应该叫开关handler)的时候使用handler的名字,而不是插件包名。加载插件使用插件包名。
handler可以叫任意名字,只是不能和已有的重复。

我不该举这样的例子,插件只是handler的分类/集中管理方式, 也可以完全抛弃插件的写法,在任意地方 执行

session.HandlerRegister.Add(wxweb.MSG_TEXT, wxweb.Handler(demo), "textdemo")

经你提醒,我发现我的插件包设计 并没带来多少便利。可以深入讨论下。

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

我现在算是明白了。

感觉这个设计的主要问题就是用户在使用插件的时候还需要去启动 handler 。从用户的角度来说,理想情况是只需知道插件的功能就够了,要么用要么不用,而不应该需要去理解插件的内部实现,分别启动每个
handler。

虽然我理解你那样设计可以让使用更灵活,但对并不熟悉代码的用户其实是不够友好的。

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

@laike9m
说的对,这里可以定两个原则。

一个插件只完成一个功能,不在一个插件里加入多个handler

插件默认开启

from wechat-go.

songtianyi avatar songtianyi commented on July 22, 2024

@laike9m
已按照这两个原则修改了插件。

from wechat-go.

laike9m avatar laike9m commented on July 22, 2024

from wechat-go.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.