编程语言支持¶
CodeLab Adapter的核心是一个消息系统,它是平台和编程语言无关的,理论上你可以使用任何编程语言来扩展CodeLab Adapter。
我们正在陆续构建多种语言的CodeLab Adapter client。
如果你只需要简单集成,参考与其他编程语言集成,目前已经给出30+种编程语言的例子。
当前文档展示的是深度集成(ZeroMQ client)。
nodejs¶
以下展示如何在nodejs中构建Adapter Node。依然是以反转字符串为例。
首先安装依赖:npm i codelab_adapter_client_nodejs
, 接着随便找个地方, 创建脚本文件: hello_world.js
:
const AdapterNode = require('codelab_adapter_client_nodejs'); const ADAPTER_TOPIC = "adapter/nodes/data"; class HelloWorldNode extends AdapterNode { constructor() { super({ name: "EIMNode" }); this.num = 0; this.receive_loop(); } message_handle(topic, payload) { console.log( `from scratch: topic: ${topic}, payload: ${JSON.stringify(payload)}` ); const content = payload.content; const reverse_content = content .split("") .reverse() .join(""); const message = { topic: ADAPTER_TOPIC, payload: { content: reverse_content, node_id: 'eim' } }; this.publish_payload(message.payload, message.topic); } pub_message() { this.num += 1; const message = { topic: ADAPTER_TOPIC, payload: { content: this.num } }; this.publish_payload(message.payload, message.topic); } run() { this.pub_message(); } } try { m = new HelloWorldNode(); m.run(); } catch (err) { console.log(err); process.exit(); }
运行CodeLab Adapter(作为消息中心), 运行我们的拓展: node hello_world.js
让我们在CodeLab Scratch3中尝试一下反转字符串:
成功!
LISP¶
依赖: pip install hy
hy是一门LISP方言,构建在Python之上,可以使用Python生态里的所有库。于是我们可以很方便地构建Adapter Node: hello_world.hy
(import codelab_adapter_client) (import time) (defclass HelloWorldNode [codelab_adapter_client.AdapterNode] "LISP hello world node" (defn --init-- [self] (.--init-- (super)) (setv self.NODE_ID "eim")) (defn extension-message-handle [self topic payload] (print f"the message payload from scratch: {payload}") (setv content (list (get payload "content"))) (.reverse content) (payload.__setitem__ "content" (.join "" content)) (print payload) (self.publish {"payload" payload}) ) (defn run [self] (while self._running (time.sleep 1))) ) (setv node (HelloWorldNode)) (.receive-loop-as-thread node) (.run node)
运行CodeLab Adapter(作为消息中心), 运行我们的拓展: hy hello_world.hy
很多Python内置函数没有写成LISP风格,所以看起来没什么LISP风味,更多Python风味。