为了说明某种情况,
我先写一段伪代码模拟从Torrent到下载MP4,然后创建窗口再到播放的过程!
请注意
//----节点node0
//----这是进程0(或者微函数0,以下的进程和微函数请自行区别)(pid0)----
//微函数是有参数和返回值的,这里的(*)匹配任何类型,我省略了微函数返回值的声明
TINY((*) argv)("/process/pid0")//这是微函数的声明,这里直接将它安装到系统的/process/pid0 目录下,
{
Torrent test = new Torrent("data1/test.torrent");//
//或者可以这样 : Torrent test = System.fs.get<Torrent>("test.torrent")
String name = test.getName();
String infoHash = test.infoHash().toHexStr();//假设这个种子的InfoHash为:FF
//这在标准输出中写入:InfoHash is :FF!
System.out.println("InfoHash is :${infoHash}!");//这里借用Dart形式的带变量字符串(${infoHash})来渲染一种智能的气氛!!
if(!"abc.mp4".equals(name)){
test.setNmae("abc.mp4",FLUSH);//修改种子的名称,然后直接(算是手动触发)同步到存储器!.至于底层如何同步暂时忽略
}
MP4 mp4 = (MP4)test.download2("/data/test.mp4");// 同步下载文件(当然也可以使用异步的写法),
//保存到目录/data下(简单的强制类型转换看作是自动的解码把)
Window win = System.gui.createWindow("Window Title!");//在系统中创建一个窗口,当然窗口也可以使持久化的数据结构
EventBus hub = mp4.play(win);//将下载之后的视频扔到窗口播放!
hub.onEnd([](){
win.close();//播放完毕,自动关闭窗口
});
Process current = System.process.getCurrent();//获得当前进程其路径为:/process/pid0
current.addData("key",mp4.getMeta("a"));//将MP4的Meta跟pid0关联,因为我觉得构建结构化的查询过程比较复杂,在此只用KV数据库的方式将数据与进程关联
current.funsh()//将数据刷到System中
//--这是另外一种形式
//System.send("pid1",mp4); //把mp4发送到进程为pid的外部进程,结构化的进程之间通信
//System.send("pid1",mp4)
//这里的进程不仅仅是一个动态的"任务",也是文件系统之上的一个结构(他是持久化的)
//直接获得进程1,用路径的形式让他看起来像是从文件系统中得到的(如果文件系统中的进程不存在,则自动创建一个)
Process p1 = System.process.get("/process/pid1",true);
System.send(p1,mp4)//将"结构化的MP4"发送到进程1,
//然后退出或者循环等待!如果是微函数退出,则发送过程就交给操作系统来管理!如果阻塞,提供超时!具体底层实现不解释!
}//END OF TINY
//----节点node0
//----同一系统上的另外一个进程:id为pid1----
TINY("/process/pid0")
{
System.process.get("/process/pid1");//获得pid0保存在process的进程
System.onReceiveData([](Process sender,MP4 data){//这是进程1,接受进程0的数据
if(sender.name == "pid0")
{
Window win = System.gui.createWindow("Window 2");//在系统中创建一个窗口
win.show(data);//然后播放
}
});
}
//----不同节点(node1)上的另外一个进程(pid2)----
TINY("/process/pid2"){
MP4 m = System.network.get("node0:/data/test.mp4");//这个过程是瞬时
Meta metaFromMP4 = m.getMeta("a");//从mp4中获得meta信息
Process ppp = System.process.get("node0:/process/pid1",false);//从节点0获得关联进程
Meta metaFromProcess = (Meta)ppp.getData("a");//从节点0进程1关联的数据库中获得meta信息!
if(metaFromProcess != metaFromMP4){
//... ERROR
}
}
//----这是调用代码---tiny函数可以任意组合,这种每一种组合可以表示为一个任务!!
Tiny tiny = System.getTiny("node0:/process/pid0")
EventBus busPid0 = tiny.getEventBus();//这里返回一个事件插座!
busPid0.onExit(....);//监听pid0是否结束运行
tiny.run(1,ANYTIME);//将Tiny加入运行Schedule,这里的1表示只运行一次,
//ANYTIME表示系统可以调度在任何时间运行(看操作系统心情),说明时间对函数的影响将不考虑!
//当然也可以设置优先级,或者让他立即执行或者安排在哪个函数之前或者之后???
System.run("node0:/process/pid1");//同步,立即运行
System.run("node1:/process/pid2");//
System.exit();//退出系统,继续...Reloop!
//Process.onExit(....);//
这个系统的简单说明”