Skip to content

Commit 8c61d06

Browse files
committed
Created new stubs and API for scritping engine.
1 parent e4f421a commit 8c61d06

12 files changed

Lines changed: 592 additions & 0 deletions

File tree

src/scripting/OOAPI.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
OOAPI (Out-Of API) API规制外函数
2+
=====================
3+
4+
OOAPI函数是不参考 Bilibili高级脚本弹幕的部分。其中包括如下函数,我们强烈不建议对OOAPI函数进行
5+
任何覆盖或改写。
6+
7+
__trace(object:Object, traceMode:String)
8+
---------------------
9+
底层 trace 函数,object 为 trace 文字, traceMode 为 trace 模式:
10+
- 'log': 普通 log,如果关闭播放器 log,则不会输出
11+
- 'warn' : Warning 警告,告知API使用错误或Deprecate通知,关闭严格模式则不输出
12+
- 'err' : Error 错误,永远输出。一般来说 err 表示无法纠正的错误,上一个操作可能已经失效。
13+
- 'fatal' : Fatal 引擎错误,永远输出。一般来说一旦 trace 出 fatal错误,BScript可以终止目前的Worker实例
14+
15+
__channel(id:String, payload:Object, callback:Function)
16+
---------------------
17+
底层双向通讯接口。向 id 发送 payload。如果 Channel没有定义回调则 callback 不会被执行
18+
否则 callback 会返回回调信息。
19+
20+
__schannel(id:String, callback:Function)
21+
---------------------
22+
底层订阅接口。订阅一个数据流。
23+
24+
__pchannel(id:String, payload:Object)
25+
---------------------
26+
底层发布接口。发布数据到一个数据流。
27+
28+
__achannel(id:String, auth:String, payload:Object)
29+
---------------------
30+
底层单向认证接口。向认证接口 id 发送认证数据串和 payload。
31+
32+
__OOAPI
33+
---------------------
34+
总控。

src/scripting/Readme.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Scripting Platform 脚本开发
2+
========================
3+
4+
经过 experimental 分支证明了可行性之后,现在 scripting 將纳入主线。
5+
6+
Building
7+
------------------------
8+
目前还不自动 build ,这里只有 API 头头。
9+
10+

src/scripting/Worker.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/**
2+
* The Wrapping API Worker. Here the OOAPI is defined
3+
**/
4+
var __OOAPI = function(){
5+
var channels = {
6+
7+
};
8+
9+
function dispatchMessage(msg){
10+
if(channels[msg.channel]){
11+
for(var i = 0; i < channels[msg.channel].length; i++){
12+
try{
13+
channels[msg.channel][i](msg.payload);
14+
}catch(e){
15+
__trace(e, 'err');
16+
}
17+
}
18+
}
19+
};
20+
21+
self.addEventListener("message",function(msg){
22+
if(msg){
23+
if(msg.action){
24+
if(msg.action === "reply"){
25+
dispatchMessage(msg);
26+
}
27+
}
28+
}
29+
});
30+
31+
this.addListenerChannel = function(channel, listener){
32+
if(!channels[channel])
33+
channels[channel] = [];
34+
35+
channels[channel].push(listener);
36+
};
37+
};
38+
39+
function __trace(obj, traceMode){
40+
self.postMessage(JSON.stringify({
41+
"action":"trace",
42+
"obj":text,
43+
"mode": (traceMode ? traceMode : "log")
44+
}));
45+
};
46+
47+
function __channel(id, payload, callback){
48+
self.postMessage(JSON.stringify({
49+
"action":"channel",
50+
"payload":payload,
51+
"callback":true
52+
}));
53+
__OOAPI.addListenerChannel(id, callback, true);
54+
};
55+
56+
function __schannel(id, callback){
57+
__OOAPI.addListenerChannel(id, callback);
58+
};
59+
60+
function __pchannel(id, payload){
61+
self.postMessage(JSON.stringify({
62+
"action":"channel",
63+
"payload":payload,
64+
"callback":false
65+
}));
66+
};
67+
68+
function __achannel(id, auth, payload){
69+
self.postMessage(JSON.stringify({
70+
"action":"autorizedChannel",
71+
"auth":auth,
72+
"payload":payload,
73+
"callback":false
74+
}));
75+
};

src/scripting/api/Display.js

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
var $ = new function(){
2+
/**
3+
* Inner classes
4+
**/
5+
function Matrix(a,b,c,d,tx,ty){
6+
// TODO: http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html
7+
var data = [[a,c,tx],[b,d,ty],[0,0,1]];
8+
this.clone = function(){
9+
return new this(a,b,c,d,tx,ty);
10+
};
11+
this.concat = function(matrix){
12+
return;
13+
};
14+
this.
15+
};
16+
17+
function SVGShape(){
18+
var id = Runtime.generateIdent();
19+
};
20+
21+
function CanvasObject(){
22+
var id = Runtime.generateIdent();
23+
};
24+
25+
function ButtonObject(){
26+
var id = Runtime.generateIdent();
27+
};
28+
29+
function CommentObject(){
30+
var id = Runtime.generateIdent();
31+
};
32+
33+
function FilterObject(){
34+
var id = Runtime.generateIdent();
35+
};
36+
/**
37+
* Private Variable stubs
38+
**/
39+
var stage = {
40+
width:-1,
41+
height:-1,
42+
fsWidth:-1,
43+
fsHeight:-1
44+
};
45+
46+
/**
47+
* Private method stubs
48+
**/
49+
var _fullScreenWidth = function(){
50+
return stage.fsWidth;
51+
};
52+
53+
var _fullScreenHeight = function(){
54+
return stage.fsHeight;
55+
};
56+
57+
var _width = function(){
58+
return stage.width;
59+
};
60+
61+
var _height = function(){
62+
return stage.height;
63+
};
64+
65+
/**
66+
* Bind listeners
67+
**/
68+
__schannel("update:dimension", function(dim){
69+
stage.width = dim.stageWidth;
70+
stage.height = dim.stageHeight;
71+
stage.fsWidth = dim.screenWidth;
72+
stage.fsHeight = dim.screenHeight;
73+
});
74+
75+
76+
/**
77+
* Public method stubs
78+
**/
79+
this.createMatrix = function(){
80+
81+
};
82+
83+
this.createPoint = function(x, y){
84+
85+
};
86+
87+
this.createComment = function(text, param){
88+
89+
};
90+
91+
this.createShape = function(param){
92+
93+
};
94+
95+
this.createCanvas = function(param){
96+
97+
};
98+
99+
this.createButton = function(param){
100+
101+
};
102+
103+
this.createGlowFilter = function(color, alpha, blurX, blurY, strength, quality, inner, knockout){
104+
105+
};
106+
107+
this.createBlurFilter = function(blurX, blurY, quality){
108+
109+
};
110+
111+
this.toIntVector = function(arr){
112+
113+
};
114+
115+
this.toUIntVector = function(arr){
116+
117+
};
118+
119+
this.toNumberVector = function(arr){
120+
121+
};
122+
123+
this.createVector3D = function(x,y,z,w){
124+
125+
};
126+
127+
this.createMatrix3D = function(x,y,z,w){
128+
129+
};
130+
131+
this.createColorTransform = function(rM, gM, bM, aM, rO, gO, bO, aO){
132+
133+
};
134+
135+
this.createTextFormat = function(font, size, color, bold, italic, underline, url, target, align, leftMargin, rightMargin, indent, leading){
136+
137+
};
138+
139+
this.toString = function(){
140+
return "[display Display]";
141+
};
142+
/**
143+
* Initializer for all the getter/setter fields
144+
*/
145+
if(this.__defineGetter__){
146+
this.__defineGetter__("fullScreenWidth", function(){
147+
return _fullScreenWidth();
148+
});
149+
this.__defineGetter__("fullScreenHeight", function(){
150+
return _fullScreenHeight();
151+
});
152+
this.__defineGetter__("width", function(){
153+
return _width();
154+
});
155+
this.__defineGetter__("height", function(){
156+
return _height();
157+
});
158+
this.__defineGetter__("version", function(){
159+
return "CCLDisplay/1.0 HTML5/* (bilibili, like BSE, like flash)";
160+
});
161+
}
162+
163+
if(this.__defineSetter__){
164+
this.__defineSetter__("fullScreenWidth", function(){
165+
__trace("Attempted to assign to read-only field", 'warn');
166+
});
167+
this.__defineSetter__("fullScreenHeight", function(){
168+
__trace("Attempted to assign to read-only field", 'warn');
169+
});
170+
this.__defineSetter__("width", function(){
171+
__trace("Attempted to assign to read-only field", 'warn');
172+
});
173+
this.__defineSetter__("fullScreenHeight", function(){
174+
__trace("Attempted to assign to read-only field", 'warn');
175+
});
176+
}
177+
};
178+
179+
/** Create alias **/
180+
var Display = $;

src/scripting/api/Function.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/** These are all defined in the global namespace **/
2+
function trace(msg){
3+
__trace(msg, 'log');
4+
}
5+
6+
function require(scriptname){
7+
var fn = BASE_URL + scriptname;
8+
importScripts(fn);
9+
};
10+
11+
function load(library, onComplete){
12+
var libname = "";
13+
switch(library){
14+
default:
15+
break;
16+
};
17+
if(libname !== ""){
18+
try{
19+
require("libraries/" + libname + ".js");
20+
}catch(e){
21+
trace("Error: Import script failed.");
22+
}
23+
}
24+
if(onComplete)
25+
onComplete();
26+
};
27+
28+
function clone(a){
29+
// Shallow copy
30+
var b = {};
31+
for(var x in a){
32+
b[x] = a[x];
33+
}
34+
return b;
35+
};
36+
37+
function foreach(dtype, f){
38+
for(var x in dtype){
39+
f(x, dtype[x]);
40+
}
41+
return;
42+
};

0 commit comments

Comments
 (0)