POX控制器的创建组件及事件处理

1. 创建组件

POX提供一系列API,使用户可以创建自己的组件,实现自己的功能

组件的注册

创建的组件需要注册到core中,使用core的一个主要目的就是为各个组件提供一个集结地。core是类POXcore的一个实例。

向core注册组件,有两种方法

(1)core.register()

register()方法注册一个类(组件)实例,使用两个参数,第一个参数是组件注册到core的名称,第二参数是组件实例

例子:

#!/usr/bin/python
from pox.core import core

class MyComponent(object):
    def __init__(self, an_arg):
        self.arg = an_arg
        print "MyComponent instance registered with arg:", self.arg

    def message(self):
        print "MyComponent with arg:", self.arg

def launch():
    component = MyComponent("chosen")
    core.register("square", component)
    core.square.message()

(2)core.registerNew()

registerNew()方法注册一个类(组件),若该组件有_core_name属性,则注册到core的组件名称为_core_name的值,否则就是类名称本身

例子

#!/usr/bin/python

from pox.core import core

class MyComponent(object):
    _core_name = "square"

    def __init__(self, an_arg):
        self.arg = an_arg
        print "MyComponent instance registered with arg:", self.arg

    def message(self):
        print "MyComponent with arg:", self.arg

def launch():
    core.registerNew(MyComponent, "chosen")
    core.square.message() #注意此处是用组件名称‘square’调用组件的函数

2. POX事件机制

POX的事件处理符合发布/订阅模式(publish/subscribe paradigm)。

某个对象publish事件(在revent术语中,称为”raising“一个事件,也叫“sourcing”,“firing”,“dispatching”事件)

另外的对象可以在这个对象上subscribe指定的事件(在revent术语中,称为“listening to”,也叫“handling”,或者“sinking”)

POX中的事件都是revent.Event的子类, raise事件的类继承自EventMixin, EventMixin中有个类级别变量_eventMixin_Events,在其中声明所需raise的事件

(1) 创建自己的事件类型,继承自Event

class RunningStarted(Event):
    def __init__(self, name = "nike"):
        Event.__init__(self)
        self.name = name

    @property
    def runner_start(self):
        return self.name == "nike"

(2) 创建raise事件的类,继承自EventMixin

class Game(EventMixin):
    _eventMixin_events = set([
        RunningStarted,
    ])

(3) 创建处理事件的函数,通常带有一个参数,即event对象本身

def start_run(event):
        print "it‘s time now, start running"

(4) 侦听事件(侦听事件的方法有addListener()、addListenerByName()和addListeners())

侦听事件前创建类Game的实例game

game = Game()

侦听事件RunningStarted

game.addListener(RunningStarted, start_run)

(5) raise事件

game.raiseEvent(RunningStarted("nike")

注意:必须先侦听事件,再raise事件

(6) 最后注册组件

def launch():
    core.registerNew(Game)
时间: 2024-10-10 15:41:57

POX控制器的创建组件及事件处理的相关文章

jQuery MiniUI开发系列之:创建组件对象

原文:http://miniui.com/bbs/forum.php?mod=viewthread&tid=20&extra=page%3D1 jQuery MiniUI可以使用Javascript和Html两种方式来创建对象. 1)Javascript创建对象使用JavaScript创建对象,是最基本的方式,有如下几个要点: 1)使用new关键字.如: var grid = new mini.DataGrid(); 2)使用set方法设置属性.如:grid.setUrl("ge

控制器的创建方式 -- 及其导航控制器的管理

一 控制器的创建方式 1.storyboard创建 1 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 2 3 self.window.backgroundColor = [UIColor blueColor]; 4 5 UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 6 7 /

PDF文档创建组件Spire.PDF for .NET

Spire.PDF for .NET控件是一款由e-iceblue公司开发的专业性的PDF文档创建组件.它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档.Spire.PDF for .NET不仅可以运用在服务端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中.Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows

iOS控制器的创建方式

iOS控制器的创建.除了常见的alloc init外还有通过加载storyboard和xib的方式,下边逐一展开: 1.代码alloc init 创建方式 ViewController *vc= [[ViewController alloc] init]; 2.storyboard创建控制器 1>加载制定的storyboard文件 UIStoryboard *board =     [UIStoryboard storyboardWithName:@"viewCon" bundl

专业性的PDF文档创建组件 Spire.PDF for .NET

Spire.PDF for .NET控件是一款由e-iceblue公司开发的专业性的PDF文档创建组件.它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档.Spire.PDF for .NET不仅可以运用在服务端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中.Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows

动态创建组件TEdit

//动态创建组件TEdit procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);var  Edit:TEdit;begin  Edit:=Tedit.Create(nil);  Edit.parent :=Self;  Edit.Show;  Edit.Left := x;  Edit.Top := y;end;{ tedit1 }pro

vue.js 创建组件 子父通信 父子通信 非父子通信

1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>创建组件</title> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> &l

Delphi动态创建组件,并释放内存

开发所用delphi版本是xe2,效果图如下: 代码如下: ----------------------------------------------------------------------------------------------------------------- unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Class

iOS开发UI篇—控制器的创建

iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中创建一个控制器. 1 #import "YYAppDelegate.h" 2 #import "YYViewController.h" 3 4 @implementation YYAppDelegate 5 6 - (BOOL)application:(UIApplic