ICE代码详解
ICE简单介绍(InternetCommunicationEngine)
![ICE简单介绍(InternetCommunicationEngine)](https://img.taocdn.com/s3/m/0341beed710abb68a98271fe910ef12d2af9a904.png)
ICE简单介绍(InternetCommunicationEngine)1. ICE的⼀些背景ICE 是ZeroC的主要产品, 是⼀个object-oriented toolkit,⽤来帮助我们构建分布式应⽤程序,使我们专注于程序的逻辑⽽不是底程⽹络交互的细节ZeroC provides a fast and highly-scalable communications infrastructure for demanding technical applications, such as telecom, defense, finance, on-line entertainment, manufacturing, and process control. ZeroC's core product is Ice, the . Ice is one of the most versatile and powerful distributed computing platforms ever.With an aggressive, no-nonsense licensing model for the Open Source community (GPL, the ), in addition to traditional for commercial customers, ZeroC aims to establish Ice as the leading technical middleware product.ice提供了强⼤的 RPC(remote procedure call)功能,(同步异步Invocation,dispatch), one-way (对tcp,ssl),datagram(udp) ,也就是客户端调⽤了就不管了(fire and forget) 以及提供了除rpc之外的⼏个强⼤的服务,iceGrid, iceStorm....ICE提供的编程模型:4步,定义slice⽂件, slice⽂件⽣成相应语⾔的代码(根据client,server所使⽤的语⾔),编写client-side代码并链接ICE,编写server-side代码并链接ICEICE⼴泛⽀持了各主流语⾔和 platform(OS & compiler)2. ice manual的基本内容这个⽂档是ice主要的⽂档了,编程什么的都参考它,主要分了4个部份; 2.1,概述,ice主要的⼏个部份介绍,在2.2.2(terminology)作为术语解释,包括ice object, ice proxy, ice object简单说是⼀个可以响应client request的实体,它有⾄少⼀个interface,interface则有⼀个或多个operation,每个ice object都有⼀个object identity(object在35章详讲); ice proxy: client要想contact⼀个ice object,就必须hold⼀个ice proxy,它就是ice object的本地代理,所以proxy必须有object的address信息,以及object的identity来定位object,(proxy在32章详讲), 以及⼀个hello world例⼦,告诉我们最简单的ice client,server怎么写2.2 slice(specification language for ice) , slice在client和server之间做了⼀个约定, slice会被c++的预处理器作预处理,所以我们在⽂件中都应该⽤到#ifndef, #define,#endif,另外 #include应该⽤<>,这样slice compiler会在编译选项的-I路径中去查找头⽂件,slice中所有的定义都必须放到module中,不能在全局定义特别的要提到Ice module, 基本上所有的Ice run time时的API, 都是在以slice的形式定义和表达的,在module Ice { }中,⽐如我们下⾯提到的communicator是⼀个slice的interface slice中的类型有basic types , user-defined types(enum, structure, sequence, dictionary), sequence<type>, dictionary<type,type>在c++中被映射为vector和mapinterface是slice中最中⼼最关注的东西了,通过proxy调⽤⼀个operation则就由Ice run time向⽬标object发送了⼀个message, 4.10.4讲了ice所定义的exception的层次结构,根处是Ice::Exception,应该是Ice⾃⼰⽤Slice定义的吧,不知道映射到C++中是不是std::Exception,interface可以⽤extends来派⽣, interface Thing extends BaseThing {}class的内容很丰富,后⾯看,有和interface,struct的⽐较。
Ice.Application 类
![Ice.Application 类](https://img.taocdn.com/s3/m/91d49a047cd184254b3535cb.png)
参考《Ice 分布式程序设计》马维达译一、main函数Ice run time 的主要进入点main函数的主体结构如下:package Demo;public class Server {public static void main(String[] args) {int status = 0;municator ic = null;try {ic = Ice.Util.initialize(args);//...} catch (Ice.LocalException e) {e.printStackTrace();status = 1;} catch (Exception e) {System.err.println(e.getMessage());status = 1;}if (ic != null) {try {ic.destroy();} catch (Exception e) {System.err.println(e.getMessage());status = 1;}}System.exit(status);}}初始化函数Ice.Util.initialize 接受的参数向量是由操作系统传给main 的。
这个函数扫描参数向量,查找任何与Ice run time 有关的命令行选项,但不会移除这些选项。
如果在初始化过程中出了任何问题, initialize 会抛出异常。
在离开main 函数之前,必须调用Communicator.destroy()。
destroy 操作负责结束Ice run time。
特别地,destroy 会等待任何还在运行的操作调用完成。
此外, destroy 还会确保任何还未完成的线程都得以汇合,并收回一些操作系统资源,比如文件描述符和内存。
决不要让main 函数不先调用destroy 就终止;这样做会导致不确定的行为。
注意,这段代码把对Ice.initialize 的调用放在了try 块中,并且会负责把正确的退出状态返回给操作系统。
ICE Python实例
![ICE Python实例](https://img.taocdn.com/s3/m/068836f70242a8956bece4b1.png)
运 行
运 行
1. 先运行客户端接口,双击Client.py,弹出窗 口后闪退。 2. 我们在返回刚才打开的服务窗口,你是不 是看到了一串文字。这就说明你成功了! 如果你感兴趣为啥是写的这个文字,你可 以返回看我们的客户端的代码。你就会发 现惊喜。
谢 谢
联系人:Coco 联系QQ:2892364670
4. PATH的配置也要添加ICE的环境变量配置: %ICE_HOME%\bin
环 境 安 装
5. 替换配置文件IcePy.pyd到C:\Program Files\ZeroC\Ice-3.4.1\python。 6. 安装python2.6.6(不要安装更高级别的版本, 否则实例代码可能不能运行) 7. 记录安装路径C:\Python26
8. 配置环境变量ICEPY_HOME,值为 C:\Program Files\ZeroC\Ice-3.4.1
环 境 安 装
9. 在path中增加Python的安装路径。注意前后 的英文分号
10. 设置PYTHONPATH指向ICE_HOME\python目 录下。值为:%ICE_HOME%\python;
ICE-Python
目 录
一、ICE介绍 二、ICE和Python的实例应用
1. ICE是ZEROC的开源通信协议产品 2. 它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎 3. 是一个面向对象的中间件,使我们能够以 最小的代价构建分布式应用程序。 4. ICE使我们专注于应用逻辑的开发,它来处 理所有底层的网络接口编程。 5. ICE功能:打开网络连接、网络数据传输的 序列化与反序列化、连接失败的尝试次数 等。
1. 新建text文件 2. Copy备注里的内容
ICE
![ICE](https://img.taocdn.com/s3/m/2526444de518964bcf847cc1.png)
8.线程支持: 8.线程支持: Ice run time完全是线程化的,其API是 time完全是线程化的,其API是 线程安全的.作为应用开发都,你无需为 开发线程化的高性能客户和服务器付出额 外努力 ; 9.传输机制无关性: 9.传输机制无关性: ICE目前采用TCP/IP和UDP作为传输 ICE目前采用TCP/IP和UDP作为传输 协议.客户和服务器代码都不需要了解底 层的传输机制 ;
ICE服务 ICE服务
ICE有一些功能特性被实现成ICE服务器,自己开发的应用充当的是这 ICE有一些功能特性被实现成ICE服务器, 些服务器的客户端.ICE服务有:IcePack,IceBox,IceStorm,IcePath,Glacier. 些服务器的客户端.ICE服务有:IcePack,IceBox,IceStorm,IcePath,Glacier. 1. IcePack: IcePack: 我们在第 12页提到过, IcePack 是 Ice的定位服务,用于在使用间接 12页提到过, Ice的定位服务,用于在使用间接 绑定时把符号性的 (symbolic)适配器名解析为协议-地址对. 除了这样 symbolic)适配器名解析为协议-地址对. 的定位服务, IcePack还提供了其他特性: IcePack还提供了其他特性: IcePack 允许你注册服务器,进行自动启动:当客户发出请求时,服 务器无需在运行, IcePack 会在第一个客户请求到达时,随需启动服务器. IcePack 支持部署描述符 (deployment descriptors),能让你轻松地配 descriptors),能让你轻松地配 置含有若干服务器的复杂应用. IcePack 提供了一种简单的对象查找服务,客户可用来获取它们感兴趣 的对象的代理.
ice方案
![ice方案](https://img.taocdn.com/s3/m/5b324cab988fcc22bcd126fff705cc1755275f00.png)
Ice方案1. 概述在计算机科学领域,Ice(Internet Communications Engine)是一种面向对象的分布式计算平台,它提供了一种简单而强大的方式来实现分布式应用的开发。
Ice使用一种特定的接口定义语言(IDL)来描述分布式应用程序的接口,然后自动生成客户端和服务器端的代码。
通过使用Ice,开发人员可以轻松地在不同的计算机或操作系统之间进行通信。
Ice具有以下几个主要特点:•面向对象:Ice基于面向对象的编程模型,可以方便地创建分布式对象,并通过远程调用来访问和操作这些对象。
•平台无关性:Ice支持跨平台的开发,可以运行在多种不同的操作系统和编程语言上。
•异步通信:Ice支持异步通信模式,可以提高系统的性能和并发能力。
•安全性:Ice提供了多种安全机制,可以确保通信的机密性和数据的完整性。
2. Ice的基本概念2.1 接口定义语言(IDL)IDL是Ice中用来描述分布式应用程序接口的语言。
开发人员可以使用IDL来定义自己的接口,包括对象的属性、方法、异常等。
Ice的IDL非常类似于其他编程语言中的接口定义,但它是独立于任何编程语言的。
Ice会根据IDL文件自动生成客户端和服务器端的代码。
以下示例是一个简单的IDL文件的例子:module MyModule {struct MyStruct {string name;int age;};interface MyInterface {void sayHello();MyStruct getInfo();};};2.2 代理和对象适配器在Ice中,客户端通过代理来访问远程对象。
代理是客户端调用的一个本地对象,它负责将方法调用转发给远程对象,并将结果返回给客户端。
服务器端使用对象适配器来注册和激活对象,并将对象与特定的网络地址绑定。
对象适配器可以理解为一个“中间人”,它负责接收客户端的请求,并将其转发给实际的对象进行处理。
2.3 通信协议和传输方式Ice支持多种通信协议和传输方式。
线切割FANUCα-1ice代码
![线切割FANUCα-1ice代码](https://img.taocdn.com/s3/m/386abef5770bf78a65295458.png)
功能FANUC α-1ice格式G04暂停(指定时间停止G04 P-- or G04 x--G92设定坐标系G92 X--Y--I--J--G93设定局部坐标系G93 X--Y--G28机床原点(参考位置)返回G28 X--Y--U--V--G29从参考位置返回G29 X--Y--U--V--G30第二第三第四参考位置返回G30 P--X--Y--U--V--G32参考位置设定-A G32 P- (设定当前位置)G33参考位置设定-B G33 P--X--Y--U--V-- (设定任意位置) G53在机床坐标定位G53 X--Y--U--V--G10设定偏置或加工条件G10 P--R-- (设定偏置) G10 P--X-Y-Z-U-V-W-I-J-K-(设定加工条件)G11设定加工条件G11 P--X-Y-Z-U-V-W-G00快速移动G00 X--Y--U--V--G01直线插补(加工进给)G01 X--Y--U--V--G02圆弧插补(顺时针旋转)G02 X--Y--I--J--U--V--K--L--G03圆弧插补(逆时针旋转)G03 X--Y--I--J--U--V--K--L--G17指定平面(XY平面)G17G90绝对指令G90 (绝对坐标指令)G91增量指令G91 (相对坐标指令)G22软限制ON G22 X--Y--I--J--G23软限制OFF G23G94定速进给G94 X--Y--F--G95伺服进给G95 X--Y--G20英制输入G20G21米制输入G21G40取消偏置G40 X--Y--G41偏置左G41 X--Y--G42偏置右G42 X--Y--G50取消锥度倾斜G50 X--Y--G51锥度倾斜方向左G51 X--Y--G52锥度倾斜方向右G52 X--Y--G60上下独立转角R G60 R----K----G61圆锥形转角R G61 R----G62圆锥形转角R G62 R----G63圆锥形转角R G63 R----G48插入自动转角R ON G48G49插入自动转角R OFF G49G54工件偏置的指令(工件坐标系)G54 or G54 P--G55P02的工件偏置的指令(工件坐标系)G55G56P03的工件偏置的指令(工件坐标系)G56G57P04的工件偏置的指令(工件坐标系)G57G58P05的工件偏置的指令(工件坐标系)G58G59P06的工件偏置的指令(工件坐标系)G59G70端面定位G70 P--X-- or G70 P--Y-- or G70 P--B--G71孔中心定位G71 P--X--B-- or G71 P--Y--B--代码P480G72凹槽中心定位G72 P--X-- or G72 P--Y--G74定位到圆中心 Pn G74 P-G75在相对坐标系定位G75 X--Y--G76定位到端面定位点G76 P--X--Y--G77定位到定位点G77 P--X--Y--G78定位到工件的角部G78 X--Y--G79计算工件倾角\计算圆中心Pn G79 Q--B-- G79 Pn BO or G79 pn B1 X--Y--G170端面定位(高精度定位)G170P--X-- or G70 P--Y--G171孔中心定位(高精度定位)G171P--X-- or G70 P--Y--G172凹槽中心定位(高精度定位)G172P--X-- or G70 P--Y--G174保存工件坐标系位置G174 P--X--Y--G65用户宏程序调用G65 P---- L--自变量1 自变量2…G66宏程序连续调用 ON G66 P---- L--自变量1 自变量2…G67宏程序连续调用 OFF G67。
ICE介绍
![ICE介绍](https://img.taocdn.com/s3/m/3bb50ffb910ef12d2af9e738.png)
ICE资料整理概念ICE: (The Internet Communications Engine)互联网通信引擎。
是由前CORBA专家开发的新一代面向对象中间件,ICE之轻量级分布式通讯中间件。
介绍:ICE是一种面向对象的中间件平台。
从根本上说,这意味着Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。
Ice 应用适合于异构平台环境中使用:客户和服务器可以采用不同的编程语言,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。
无论部署环境如何,这些应用的源码都是可移植的。
其采用C/S 模式结构,支持同步调用方式和异步调用方式,异步派发调用方式。
支持跨语言的对象调用。
多种语言之间采用共同的Slice(Specification Language for Ice)进行沟通。
支持ice到C,JAVA,C#,VB,Python,Ruby,PHP等多种语言的映射。
Ice源代码发布包包含一系列的第三方产品(Berkeley DB,bzip2/libbzip2,The OpenSSL Toolkit,SSLeay,Expat,STLport,mcpp)。
特点:1.平台无关性。
无论客户端或者服务端均可用现在流行的开发语言(C++ /JAVA/C#/php)进行开发,并且屏蔽语言差异性。
现在比较流行的方式是客户端用C#开发,与用C++开发的服务端直接通讯。
2.通讯协议多样性。
现在可选择TCP、UDP、HTTP进行通讯,如果对安全要求较高,可选择SSL对传输的数据进行加密。
3.Ice具有丰富的特性。
其性能远是基于jms 所不能比的。
4.ICE注重的是通讯,异构平台,多语言之间,支持远程对象的通讯中间件。
Ice个人整理资料
![Ice个人整理资料](https://img.taocdn.com/s3/m/9637deb1f121dd36a32d8224.png)
Ice个人整理资料1.客户与服务器(Clients and Servers)2.Ice 对象(Ice Objects )3.代理(Proxies )4.串化代理(Stringified Proxies )代理中的信息可以用串的形式表示。
例如:SimplePrinter:default -p 100005.直接代理(Direct Proxies )协议标识符(比如TCP/IP 或UDP)针对具体协议的地址(比如主机名和端口号)6.间接代理(Indirect Proxies)7. 同步方法调用(Synchronous Method Invocation)8. 异步方法调用(Asynchronous Method Invocation)9. 异步方法分派(Asynchronous Method Dispatch)10. 单向方法调用(Oneway Method Invocation )11. 成批的单向方法调用(Batched Oneway Method Invocation )12. 数据报调用(Datagram Invocations)13. 成批的数据报调用(Batched Datagram Invocations)14. 运行时异常(Run-Time Exceptions )15. 用户异常(User Exceptions )16. 属性(Properties )17. 骨架(skeleton)代码也是根据你的Slice 定义生成的,因此,与你用Slice 定义的对象和数据的类型是对应的。
骨架代码是客户端代理代码的服务器端等价物:它提供了向上调用(up-call)接口,允许Ice runtime 把控制线程转交给你编写的应用代码。
骨架也含有整编和解编代码,所以服务器可以接收客户发送的参数,并把参数和异常返回给客户。
18. 对象适配器(object adapter)是专用于服务器端的Ice API 的一部分:只有服务器才使用对象适配器。
ICE技术研究
![ICE技术研究](https://img.taocdn.com/s3/m/916e8f27a5e9856a56126057.png)
ICE专题ICE简介ICE(Internet Communications Engine)是一个为现实中程序员而写的中间件平台。
作为一个高性能的互联网通信平台,ICE包含了很多分层的服务和插件(Plug-ins),并且简单、高效和强大。
ICE的自由使用遵从GNU的GPL(GNU General Public Licens)许可的条款。
ICE 也有商业的许可证,如果你想将ICE使用在你的私有产品中,那么你应该使用ICE的商业许可证。
可以联系sales@来获得这方面的更多信息。
ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言,并支持在多种操作系统上运行。
更多的操作系统和编程语言将会在以后的发布中支持。
ICE有以下几部分组成:SliceICE的规范语言,跟CORBA的IDL(Interface Definition Language)等价的东西。
Slice建立了客户端和服务器端共同遵守的契约:接口。
Slice也用来描述对象持久数据。
Slice CompilersSlice的规范语言可以影射成多种编程语言。
目前ICE支持C++,Java,Python,PHP,C#和VB的语言影射。
Ice的客户端和服务器端协同工作,而不会知道分别实现的是何种编程语言。
IceIce的核心库。
在众多的特性当中,Ice核心库通过一个高效的协议(包含TCP/UDP 层上协议压缩)来管理所有的通信任务,为多线程服务器提供了一个灵活的线程池,并且有特别的功能来支持上百万对象的可扩展性。
IceUtil一些常用的功能函数集。
例如Unicode处理和多线程编程,是用C++写成。
IceBox一个专用于ICE应用的应用服务器。
ICEBox可以方便地运行和管理动态加载、共享库或java类的形式Ice的服务。
IcePack一个成熟的服务激活和部署工具。
IcePack能大大简化在异构网络之间部署应用的复杂性。
ICE中间件技术详细教程
![ICE中间件技术详细教程](https://img.taocdn.com/s3/m/208888aa18e8b8f67c1cfad6195f312b3169eb1e.png)
ICE中间件技术详细教程一、ICE中间件概述ICE中间件是一种基于网络的通信框架,它允许不同机器上的应用程序进行通信,并提供了高性能和可扩展性。
ICE基于面向对象的编程模型,将通信对象抽象为接口,并通过接口定义通信协议,从而隐藏了底层通信细节,使开发者可以专注于业务逻辑的实现。
ICE中间件支持多种编程语言,包括C++, Java, Python等,这使得开发者可以使用自己熟悉的编程语言来开发分布式应用程序。
ICE中间件还提供了丰富的工具和库,以便开发者可以更加方便地开发和调试应用程序。
二、ICE中间件的安装和配置安装完成后,需要配置ICE的环境变量。
在Windows系统下,可以在系统环境变量中添加ICE_HOME变量,并将ICE的安装路径作为其值。
在Linux系统下,可以在.bashrc文件中添加exportICE_HOME=/path/to/ice命令。
完成配置后,重新启动终端使其生效。
三、ICE中间件的基本使用在ICE中,应用程序之间的通信是通过接口进行的。
首先,需要定义接口,并使用Slice语言编写其接口规范。
Slice语言是一种专门为ICE设计的领域特定语言,用于定义接口的数据类型和方法。
例如,以下是一个简单的Slice接口定义:```slicemodule MyModuleinterface MyInterfacevoid sayHello(;};};```接口定义完成后,可以使用Slice编译器将其编译为不同语言的接口代码。
例如,可以使用slice2java命令将上述接口编译为Java代码。
接口代码生成后,可以在应用程序中使用该接口。
首先,需要创建ICE运行时环境并初始化。
然后,可以通过接口代理创建一个远程对象。
远程对象代表了另一个应用程序中的接口对象,可以通过它来调用远程接口的方法。
以下是一个简单的Java示例代码:```javaimport MyModule.*;public class Mainpublic static void main(String[] args)MyInterfacePrx myInterface =MyInterfacePrx.checkedCast(proxy);if (myInterface == null)throw new Error("Invalid proxy");}myInterface.sayHello(;}}```上述代码中,通过调用stringToProxy方法创建一个接口代理。
ICE代码详解
![ICE代码详解](https://img.taocdn.com/s3/m/7601df592e3f5727a5e96248.png)
服务器端代码:主要包括几个大的类。
Ice::Communicator类:Ice run time的主要进入点是由本地接口Ice::Communicator来表示的。
和在客户端一样,在你在服务器中做任何别的事情之前,你必须调用Ice::initialize,对Ice run time进行初始化。
Ice::initialize 返回一个智能指针,指向一个Ice::Communicator实例:int main(int argc, char * argv[]){Ice::CommunicatorPtr ic = Ice::initialize(argc, argv); // ...}在离开你的main函数之前,你必须调用Communicator::destroy。
destroy操作负责结束Ice run time。
特别地,destroy会等待任何还在运行的操作调用完成。
此外,destroy还会确保任何还未完成的线程都得以汇合(joined),并收回一些操作系统资源,比如文件描述符和内存。
决不要让你的main函数不先调用destroy就终止;这样做会导致不确定的行为。
Ice::Application类:#include <Ice/Ice.h>class MyApplication : virtual public Ice::Application { public:virtual int run(int, char * []) { //主要是来实现该run 的方法。
// Server code here...return 0;}};intmain(int argc, char * argv[]){MyApplication app;return app.main(argc, argv);}Ice::Service类:使用Ice::Service类的Ice应用至少要定义一个子类,并重新定义 start成员函数;服务必须在这个函数里执行其启动活动,比如处理命令行参数、创建对象适配器、注册servants。
Ice资料
![Ice资料](https://img.taocdn.com/s3/m/1f14c449852458fb770b56c2.png)
一、概述:编译目标:在linux平台下交叉编译一个ICE的C++动态链接库。
宿主机(host):CPU是x86体系结构的,系统是liunx。
目标机(target):CPU是arm体系结构的,系统是linux。
主要编译步骤:首先编译出x86平台的ICE,再用x86平台的相关ICE可执行文件,对ICE 进行交叉编译。
二、目录约定:我要编译的Ice是3.4.1版本的,从官方网站下载的Ice-3.4.1.tar.gz通过解压出来的Ice-3.4.1目录我将其称为IceRoot,其它目录约定如下:IceConfig -- IceRoot/configIceCppRoot -- IceRoot/cppIceCppConfig -- IceRoot/cpp/config三、ICE编译准备:1. 从/ 中下载ice源码和ice第三依赖库源码2. 编译第三方库,bzip、mcpp是必须编译,其它的可以按需要进行编译,具体需要编译哪些详见ThirdParty-Sources目录下的README文件。
四、ICE编译过程:1. 编译IceUtil 并生成libIceUtil.so2. 编译slice可执行程序(slice2cpp, slice2java, slice2cs等等)3. 编译Ice并生成libIce.so。
编译Ice的时候需要使用slice2cpp对slice/Ice目录中的.ice文件进行映射生成对应的.cpp和.h文件。
而在交叉编译过程中生成的slice2cpp(它是arm的可执行文件)不能在x86平台运行。
只能再编译一个x86平台下的slice2cpp可执行程序。
再用x86平台的slice2cpp对.ice进行映射后,再利用交叉编译器接着生成libIce.so。
五、ICE编译需要修改的文件:1. IceConfig/ mon.rules用x86平台的slice2cpp对.ice进行映射时,由于这个文件修改了LD_LIBRARY_PATH变量将ice_lib_dir目录放在最先查找的位置上导致slice2cpp会直接去找IceCppRoot/lib/libSlice.so.34。
地区交易所名称代码英文名称
![地区交易所名称代码英文名称](https://img.taocdn.com/s3/m/a7f8281810a6f524ccbf8516.png)
小原油(QM) 500桶 后两月 电子:20:00--03:30 0.025美元/桶 ±1.5美元/盎司
电子:07:00-06:15 =12.5美元
汽油(HU) 42000加仑 连续12个月 场内:23:05--03:30 0.01美分/加仑 ±0.25美元/加仑
电子:07:00-06:15 =4.2美元
(BS/ZK) 7、8、9 电子:08:30-20:00 =12.5美元
11
道琼工业指数 指数X10美元 3、6、9 场内:21:20-05:15 1点=10美元
(DJ) 12 电子:08:15-21:00
Mini道琼(YM) 指数X5美元 3、6、9 电子:08:15A-06:00A 1点=5美元
NYBOT市场 纽约商品交易所(NYBOT)
NYBOT期货交易合约 冬令时
品种/代码 合约规模 交易月份 交易时间(北京) 最小变动 涨跌幅
棉花(CT) 50000磅 3、5、7 人工:23:30--03:15 0.01美分/磅 ±3美分/磅
10、12 =5美元
英国伦敦国际金融期货及选择权交易所(LIFFE)
瑞典斯德哥尔摩选择权交易所(OM)
瑞士选择权与金融期货所(SOFFEX)
西班牙固定利得金融期货交易所(MEFFRF)
美国期货品种
CBOT市场 美国芝加哥期货交易所(cbot)
ICE简单介绍及使用示例
![ICE简单介绍及使用示例](https://img.taocdn.com/s3/m/b787e42f0b4c2e3f572763b4.png)
ICE简单介绍及使用示例1、ICE是什么?ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。
ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数等。
2、为什么会有ICE?ICE是分布式应用的一种比较好的解决方案,虽然现在也有一些比较流行的分布式应用解决方案,如微软的.NET(以及原来的DCOM)、CORBA及WEB SERVICE 等,但是这些面向对象的中间件都存在一些不足:.NET是微软产品,只面向WINDOWS系统,而实际的情况是在当前的网络环境下,不同的计算机会运行不同的系统,如LINUX上面就不可能使用.NET;CORBA虽然在统一标准方面做了很多的工作,但是不同的供应商实现之间还是缺乏互操作性,并且目前还没有一家供应商可以针对所有的异种环境提供所有的实现支持,且CORBA的实现比较复杂,学习及实施的成本都会比较高;WEB SERVICE最要命的缺点就是他的性能问题,对于要求比较高的行业是很少会考虑WEB SERVICE的。
ICE的产生就是源于.NET、CORBA及WEB SERVICE这些中间件的不足,它可以支持不同的系统,如WINDOWS、LINUX等,也可以支持在多种开发语言上使用,如C++、C、JAVA、RUBY、PYTHON、VB等,服务端可以是上面提到的任何一种语言实现的,客户端也可以根据自己的实际情况选择不同的语言实现,如服务端采用C语言实现,而客户端采用JAVA语言实现,底层的通讯逻辑通过ICE的封装实现,我们只需要关注业务逻辑。
3、ICE是如何工作的?Ice 是一种面向对象的中间件平台,这意味着 Ice为构建面向对象的客户-服务器应用提供了工具、API 和库支持。
ICE入门级资料
![ICE入门级资料](https://img.taocdn.com/s3/m/27b340d40c22590102029dce.png)
执行完之后,会在对应的目录生成一个文件:test.cs
新建一个 c#ห้องสมุดไป่ตู้体工程
添加引用,把 ICE 的相关的 DLL 引入。(Ice.dll、IceStorm.dll,把这两个文件先拷贝到生成可执行目录下, 如 C:\work\project\AutoManage\AutoManage\bin\Debug,然后引入)步骤如下截图顺序:
} config.client 文件内容
Ice.Override.ConnectTimeout=5000 # 以下是 Ice 的配置 127.0.0.1 是服务器地址 TopicManager.Proxy=DemoIceStorm/TopicManager:default -h 127.0.0.1 -p 10000 CLTS.Printer=Printer:tcp -h 127.0.0.1 -p 11000 注解说明:红色的为接口类名 启动顺序: 启动 ice 程序 启动 C++实现程序 启动 C#调用程序
执行完之后,会在对应的目录生成两个文件:test.h、test.cpp 新建一个 win32 控制台项目(作为服务端程序)。 项目属性设置,如下:
修改下系统自动生成的 test.cpp 文件。如: 新建一个 cpp 文件,实现接口类中的方法。如 Ts.cpp 文件,内容如下:
include<Ice/Ice.h> #include <Ice/Application.h> #include <IceUtil/IceUtil.h> #include <IceStorm/IceStorm.h> #include"test.h" using namespace std; class PrinterI:public CLTS::Printer { virtual void printString(const std::string & s,const Ice::Current &); } ; void PrinterI::printString(const std::string &s, const Ice::Current &) { std::cout << s << std::endl; } int main(int argc,char* argv[]) { int status = 0; Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "tcp -h 127.0.0.1 -p 11000");
[讲解]五大期货交易所品种代码大全
![[讲解]五大期货交易所品种代码大全](https://img.taocdn.com/s3/m/f2b95f9085868762caaedd3383c4bb4cf7ecb788.png)
ECBOT, CME, NYBOT, NYMEX, IPE期货品种代码大全芝加哥电子商品交易所— CBOT(ECBOT)交易所IB代码产品描述交易所码货币ECBOT AIGCI道琼斯AIG商品指数ER USDECBOT DD大额道琼斯工业平均数($25)DD USDECBOT INDU道琼斯工业平均数($10)ZD USDECBOT SA5年期掉期期货SA USDECBOT SR10年期掉期期货SR USDECBOT YC迷你玉米期货XC USDECBOT YE迷你欧洲美元期货YE USDECBOT YG迷你NY黄金期货YG USDECBOT YI迷你NY白银期货YI USDECBOT YK迷你大豆期货XB USDECBOT YM迷你道琼斯工业平均数($5)YM USDECBOT YW迷你小麦期货XW USDECBOT ZB30年期美国国债ZB USDECBOT ZC玉米期货ZC USDECBOT ZF5年期美国国库券ZF USDECBOT ZG100盎司黄金期货ZG USDECBOT ZI CBOT 5000盎司白银期货ZI USDECBOT ZL豆油期货ZL USDECBOT ZM豆粕期货ZM USDECBOT ZN10年期美国国债ZN USDECBOT ZO燕麦期货ZO USDECBOT ZQ30天联邦基金ZQ USDECBOT ZR糙米期货ZR USDECBOT ZS黄豆豆期货ZS USDECBOT ZT2年期美国国债ZT USDECBOT ZW小麦期货ZW USD芝加哥商业交易所(GLOBEX)— CME (GLOBEX)交易所IB代码产品描述交易所码货币GLOBEX ACD澳元ACD CAD GLOBEX AJY澳元AJY JPY GLOBEX AUD澳元6A USD GLOBEX BOS波士顿房产指数BOS USDGLOBEX BQX 芝加哥电子迷你纳斯达克生物技术指数BIO USDGLOBEX BRE巴西不动产指数6L USD GLOBEX CAD加元6C USD GLOBEX CHF瑞士法郎6S USD GLOBEX CHI芝加哥房产指数CHI USD GLOBEX CJY加元CJY JPY GLOBEX CUS房产合成指数CUS USD GLOBEX CZK克郎CZK USD GLOBEX DEN丹佛房产指数DEN USD GLOBEX E7欧元E7USD GLOBEX EAD欧元EAD AUD GLOBEX ECD欧元ECD CAD GLOBEX ECK克郎ECK EUR GLOBEX EED电子迷你欧元EED USD GLOBEX EHF福林EHF EUR GLOBEX EM 1 月期LIBOR 利率GLB USD GLOBEX EMD电子迷你标普中型400期货EMD USD GLOBEX EMXCME摩根士丹利资本国际新兴市场EMI USD电子迷你期货GLOBEX EPZ波兰镊币EPZ EUR GLOBEX ER2罗素2000电子迷你期货ER2USD GLOBEX ES标普500电子迷你ES USD GLOBEX EUR欧元6E USD GLOBEX FIN标普500财政部门指数FIN USD GLOBEX FTX CME的FTSE新华中国25FXN USD GLOBEX GBP英镑6B USD GLOBEX GE GLOBEX 欧洲美元GE USD GLOBEX GF育肥用牛/架子牛GF USD GLOBEX GSCI CME高盛商品指数GD USD GLOBEX GTB13周期转账票据GTB USD GLOBEX HE瘦猪肉HE USD GLOBEX HUF福林HUF USD GLOBEX ILS以色列币ILS USD GLOBEX IWM ISHARES 罗素2000IWM USD GLOBEX J7日元J7USD GLOBEX JPY日元6J USD GLOBEX KRW韩元KRW USD GLOBEX LAV拉斯维加斯房产指数LAV USD GLOBEX LAX拉斯维加斯房产指数LAX USD GLOBEX LE活牛LE USD GLOBEX MIA迈阿密房产指数MIA USD GLOBEX MID标普中型400股票指数MD USD GLOBEX MXEA MSCI EAFE 指数EFE USD GLOBEX MXP墨西哥比索6M USD GLOBEX NDX纳斯达克100股票指数ND USD GLOBEX NIY日经225指数NIY JPY GLOBEX NKD美经225指数NKD USD GLOBEX NOK挪威克郎NOK USD GLOBEX NQ纳斯达克100电子期货NQ USD GLOBEX NYM纽约房产指数NYM USD GLOBEX NZD新西兰元6N USD GLOBEX PB冰冻猪肉GPB USD GLOBEX PJY英镑PJY JPY GLOBEX PLN波兰镍币PLN USD GLOBEX PSF英镑PSF CHF GLOBEX QCN纳斯达克合成迷你指数QCN USDGLOBEX QQQQ POWERSHARES QQQ 纳斯达克100指数QQQ USDGLOBEX RF欧元RF CHF GLOBEX RMB CME 人民币/美元交叉汇率RMB USD GLOBEX RME CME 人民币/欧元交叉汇率RME EURGLOBEX RMY CME 人民币/日元交叉汇率RMY JPYGLOBEX RP欧元RP GBPGLOBEX RUR卢布6R USDGLOBEX RY欧元RY JPYGLOBEX S010年期掉期CME指数S0USDGLOBEX S22年期掉期CME指数S2USDGLOBEX S55年期掉期CME指数S5USDGLOBEX SDG圣地亚哥房产指数SDG USDGLOBEX SEK瑞典克郎SEK USDGLOBEX SFR旧金山房产指数SFR USDGLOBEX SGX标普500/花旗增长指数SG USDGLOBEX SJY瑞士法郎SJY JPYGLOBEX SMC标普小型600(乘数100)SMC USDGLOBEX SML标普小型600指数(乘数500)S MP USDGLOBEX SPX标普500股票指数SP USDGLOBEX SPY SPDR信托系列1SPY USDGLOBEX SVX标普500/花旗价值指数SU USDGLOBEX TEC标普通信/信息指数TEC USDGLOBEX USS CME美元指数USD USDGLOBEX WDC华盛顿房产指数WDC USDGLOBEX ZAR南非兰特6Z USD纽约期货交易所New York Board of Trade (NYBOT) 交易所IB代码产品描述交易所码货币NYBOT CC可可CC USDNYBOT CT2号棉花CT USDNYBOT KC咖啡“C”KC USDNYBOT OJ FC 橘汁"A"OJ USDNYBOT DX NYBOT美元FX DX USDNYBOT CR 路透Jefferies CRB(×50) CR USDNYBOT TO罗素2000(乘数500)TO USDNYBOT TF小罗素2000 (乘数100)TF USDNYBOT RYO罗素1000 (×500)R USDNYBOT RYO小罗素1000 (×100) RF USDNYBOT SB11号糖SB USDNYBOT SE14号糖SE USD纽约商业交易所— (NYMEX)交易所IB代码产品描述交易所码货币NYMEX CC可可CJ USDNYMEX KC咖啡“C”KT USDNYMEX AL NYMEX铝指数AL USDNYMEX BB布伦特金融期货指数BB USDNYMEX CL轻低硫原油CL USDNYMEX CT2号棉花TT USDNYMEX GC黄金GC USDNYMEX HG铜指数HG USDNYMEX HO燃料油HO USDNYMEX NG HENRY HUB 天然气NG USDNYMEX PA钯指数PA USDNYMEX PL白金指数PL USDNYMEX PN丙烷指数PN USDNYMEX QC迷你铜QC USDNYMEX QG迷你天然气QG USDNYMEX QH迷你燃料油QH USDNYMEX QI迷你银QI USDNYMEX QM迷你原油QM USDNYMEX QO迷你金QO USDNYMEX QU迷你汽油RBOB QU USDNYMEX RB RBOB 汽油指数RB USDNYMEX SB11号糖YO USDNYMEX SI白银指数SI USDNYMEX UX铀指数UX USD洲际交易所ICE之IPE交易所IB代码产品描述交易所码货币IPE/ICE COIL ICE布伦特原油COIL USDIPE/ICE GOIL ICE汽油GOIL USDIPE/ICE HOIL ICE燃料油HOIL USDIPE/ICE RBOB ICE NYH RBOB汽油RBOB USDIPE/ICE NGF ICE英国天然气NGF GBPIPE/ICE WTI 西德克萨斯中级原油WTI USDCME的指数期货部分在2008年8月份的成交量报告:指数期货期权部分:。
ICE 模块代码
![ICE 模块代码](https://img.taocdn.com/s3/m/c244a944be1e650e52ea994e.png)
#ifdef __MMI_PHB_ORANGE_ICE__/*step4--ICE*/#define NVRAM_EF_PHB_ICE_NUM_LID_VERNO "000"#endif#ifdef __MMI_PHB_ORANGE_ICE__/*step8--ICE*/LID_BIT VER_LID(NVRAM_EF_PHB_ICE_NUM_LID)NVRAM_PHB_ICE_NUM_INFO_STRUCT* NVRAM_PHB_ICE_NUM_LID_TOTAL {};#endif //__MMI_PHB_ORANGE_ICE__#ifdef __MMI_PHB_ORANGE_ICE__BYTE_ENTRY( I_SDMID_JRD_PHB_ICE_FEA TURE_SUPPORT, NVRAM_APP_PHNSET, NVRAM_CACHE_ID_RESERVED, KAL_FALSE, "",I_SDMID_JRD_PHB_ICE_FEA TURE_SUPPORT__V ALUE),#endif#ifdef __MMI_PHB_ORANGE_ICE__I_SDMID_JRD_PHB_ICE_FEA TURE_SUPPORT,#endif //__MMI_PHB_ORANGE_ICE__#ifdef __MMI_PHB_ORANGE_ICE__#define NVRAM_PHB_ICE_NUMBER_LGTH (51+1)/*step6--ICE*/typedef struct{kal_uint8 number[NVRAM_PHB_ICE_NUMBER_LGTH];} NVRAM_PHB_ICE_NUM_INFO_STRUCT;#endif#ifdef __MMI_PHB_ORANGE_ICE__MENU_ID_ICE_NUMBERS,MENU_ID_PHB_ICE_LIST_OPTION,MENU_ID_PHB_ICE_OPTION_VIEW,MENU_ID_PHB_ICE_OPTION_ADD,MENU_ID_PHB_ICE_OPTION_EDIT,MENU_ID_PHB_ICE_OPTION_DELETE,#endif#ifdef __MMI_PHB_ORANGE_ICE__/*step3--ICE*/#define NVRAM_PHB_ICE_NUM_LID_TOTAL 3 /*3 ICE NUMBER support*/#define NVRAM_PHB_ICE_NUM_LID_SIZE sizeof(NVRAM_PHB_ICE_NUM_INFO_STRUCT) /*the max length of number*/#endif#ifdef __MMI_PHB_ORANGE_ICE__/*step1--ICE*/,{NVRAM_EF_PHB_ICE_NUM_LID, /* LID */NVRAM_PHB_ICE_NUM_LID_SIZE, /* Size */NVRAM_PHB_ICE_NUM_LID_TOTAL, /* Total */NVRAM_NORMAL((const kal_uint8 *)NVRAM_EF_ZERO_DEFAULT),NVRAM_A TTR_A VERAGE | NVRAM_A TTR_FACTORY_RESET, /* Attributes */NVRAM_CA TEGORY_USER , /* Category */"CT62",VER(NVRAM_EF_PHB_ICE_NUM_LID),"Phonebook ICE number\0",NVRAM_RESERVED_V ALUE}#endif //__MMI_PHB_ORANGE_ICE__#ifdef __MMI_PHB_ORANGE_ICE__#define MAX_ICE_NUMBER_COUNT 3S8 m_current_ice_number_index;S8 m_phb_ice_edit_input_buff[(MAX_PB_NUMBER_LENGTH + 1) * ENCODING_LENGTH];MMI_BOOL g_phb_is_ice_support = 0x00;static BOOL g_ice_should_add = MMI_TRUE;typedef struct{BOOL m_ice_be_edit_number;U8 m_ice_count;S8 number[MAX_ICE_NUMBER_COUNT][MAX_PB_NUMBER_LENGTH + 1];}mmiPHB_ICE_info_struct;mmiPHB_ICE_info_struct g_phb_ice_info;void mmi_sms_send_from_ICE(void);void mmi_mms_send_from_ICE(void);void mmi_phb_entry_edit_ICE_number_screen(void);void mmi_phb_entry_edit_ice_number(void);void mmi_phb_ice_delete_number_confirm(void);void mmi_phb_op_delete_ice_number(void);void mmi_phb_entry_ice_number_list(void);void mmi_phb_entry_ice_option(void);extern void mmi_phb_choose_number_ice(void);extern void DisplayIdleScreen(void);#endif#ifdef __MMI_PHB_ORANGE_ICE__#define MAX_PB_OWNER_NUMBERS 4 /*For Compile OK*///#define MAX_PB_SIM_ENTRIES MAX_PHB_SIM_ENTRY/* value defined in option.mak *///#define MAX_PB_PHONE_ENTRIES MAX_PHB_PHONE_ENTRY/* value defined in option.mak */void mmiPHB_init_ICE_number(void){U16 index = 0;S16 err = 0;NVRAM_PHB_ICE_NUM_INFO_STRUCT ice_info = {0};for (index = 0; index < MAX_ICE_NUMBER_COUNT ; index++){memset(g_phb_ice_info.number[index], 0 ,MAX_PB_NUMBER_LENGTH + 1);/*For Compile OK*/ReadRecord(NVRAM_EF_PHB_ICE_NUM_LID, index+1, (void*)&ice_info, sizeof(ice_info), &err);strncpy((char*)g_phb_ice_info.number[index],(char*)ice_info.number,NVRAM_PHB_ICE_NUMBER_LGTH);}m_current_ice_number_index = 0;}#include "CallsResDef.h"#include "MainMenuDef.h"#include "MessagesResourceData.h"/****************************************************************************** *** Function name : mmi_phb_entry_op_view_ICE**** Description : View most call's detail**** Input/Output : None********************************************************************************* /void mmi_phb_entry_op_view_ICE(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*/U16 DetailPbNameImageList[MAX_PB_FIELDS];U8 item_index = 2;U8 *guiBuffer = NULL;U8 highlight = 0, start = 0;EntryNewScreen(SCR_ID_VIEW_ICE, NULL, mmi_phb_entry_op_view_ICE, NULL);guiBuffer = GetCurrGuiBuffer(SCR_ID_VIEW_ICE);highlight = m_current_ice_number_index;subMenuDataPtrs[0]= subMenuData[0];subMenuDataPtrs[1]= subMenuData[1];mmi_ucs2ncpy((S8*)subMenuDataPtrs[0],(S8*)GetString(STR_ID_PHB_ICE_ONE+highlight) ,MAX_SUB_MENUS);AnsiiToUnicodeString((S8*) subMenuDataPtrs[1], (S8*) g_phb_ice_info.number[highlight]);DetailPbNameImageList[0] = IMG_ID_CHIST_DURA TION;DetailPbNameImageList[1] = IMG_ID_CHIST_DURA TION;ShowCategory84Screen(STR_SCR_ENTRY_VIEW_CAPTION,MAIN_MENU_TITLE_PHONEBOOK_ICON,0,0,STR_GLOBAL_BACK,IMG_GLOBAL_BACK,item_index,subMenuDataPtrs,DetailPbNameImageList,LIST_MENU,0,guiBuffer);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}/****************************************************************************** ***Function name : mmi_phb_choose_number_ice**** Description : make call from ice list**** Input : None**** Output : None******************************************************************************* /void mmi_phb_choose_number_ice(void){S8 temp_number[(MAX_PB_NUMBER_LENGTH + 1) * ENCODING_LENGTH] = {0};U8 highlight = m_current_ice_number_index;ascii_to_ucs2((U8*) g_phb_ice_info.number[highlight], (S8*) temp_number);MakeCall(temp_number);}/****************************************************************************** ***Function name : mmi_phb_ice_check_add**** Description : check whether need add the ice number after setup******Input : none****Output : none******************************************************************************* /BOOL mmi_phb_ice_check_add(void){U16 index = 0;if ((MMI_TRUE == g_phb_is_ice_support) && hssa_is_orange_sim() && g_ice_should_add == MMI_TRUE){for (index = 0; index < MAX_ICE_NUMBER_COUNT ; index++){if (strlen((char*)g_phb_ice_info.number[index])){return MMI_FALSE;}}return MMI_TRUE;}return MMI_FALSE;}/***************************************************************************** * FUNCTION* mmi_phb_entry_ice_number_list* DESCRIPTION* entry ice number list* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_entry_set_ice_in_idle(void){//g_ice_should_add = MMI_FALSE;mmi_phb_entry_ice_number_list();DeleteScreenIfPresent(SCR_ID_PHB_ICE_ADD_QUERY);}/***************************************************************************** * FUNCTION* mmi_phb_ice_exit_query* DESCRIPTION* exit ice query screen.* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_ice_exit_query(void){g_ice_should_add = MMI_FALSE;GoBackHistory();}/***************************************************************************** * FUNCTION* mmi_phb_ice_query_goback_to_idle* DESCRIPTION* go to idle form ice* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_ice_query_goback_to_idle(void){g_ice_should_add = MMI_FALSE;DisplayIdleScreen();}/****************************************************************************** ***Function name : mmi_phb_ice_add_qurey**** Description : check whether need add the ice number after setup******Input : none****Output : none******************************************************************************* /void mmi_phb_ice_add_qurey(void){EntryNewScreen(SCR_ID_PHB_ICE_ADD_QUERY, NULL, mmi_phb_ice_add_qurey, NULL);ShowCategory141Screen(STR_ID_PHB_ICE_NUMBER,IMG_SCR_PBOOK_CAPTION,STR_GLOBAL_OK,IMG_GLOBAL_OK,STR_GLOBAL_CANCEL,IMG_GLOBAL_NO,(U8*) GetString(STR_ID_PHB_ICE_ADD_QUERY),IMG_GLOBAL_INFO,NULL);SetLeftSoftkeyFunction(mmi_phb_entry_set_ice_in_idle, KEY_EVENT_UP);SetRightSoftkeyFunction(mmi_phb_ice_exit_query, KEY_EVENT_UP);SetKeyHandler(mmi_phb_ice_query_goback_to_idle, KEY_END, KEY_EVENT_DOWN); }/****************************************************************************** ***Function name : mmiPHB_my_favourite_add_process**** Description : add my favourite number******Input : none****Output : none******************************************************************************* /static void mmi_phb_ice_edit_process(void){S16 err = 0;NVRAM_PHB_ICE_NUM_INFO_STRUCT ice_info = {0};if (!mmi_ucs2strlen((S8*)m_phb_ice_edit_input_buff)){DisplayPopup((PU8)GetString(STR_ID_PHB_NUM_REQUIRE),IMG_GLOBAL_ACTIV A TED,TRUE, PHB_NOTIFY_TIMEOUT, SUCCESS_TONE);}else{mmi_ucs2_to_asc((S8 *) ice_info.number, (S8*)m_phb_ice_edit_input_buff);//UnicodeToAnsii((S8 *) ice_info.number, (S8*)m_phb_ice_edit_input_buff);strncpy((S8*)g_phb_ice_info.number[m_current_ice_number_index], (S8*) ice_info.number, MAX_PB_NUMBER_LENGTH);WriteRecord(NVRAM_EF_PHB_ICE_NUM_LID,m_current_ice_number_index+1,(void*)&ice_info,NVRAM_PHB_ICE_NUM_LID_SIZE,&err);DisplayPopup((PU8)GetString(STR_ID_PHB_ICE_NUMBER_CREA TED),IMG_GLOBAL_ACTIV A TED,TRUE, PHB_NOTIFY_TIMEOUT, SUCCESS_TONE);}DeleteNHistory(1);}#if 0/****************************************************************************** ***Function name : mmiPHB_ice_edit_entry_general**** Description : entry phonebook to chose my favourite number******Input : none****Output : none******************************************************************************* /void mmiPHB_ice_edit_entry_general(void){phbListView = MMI_PHB_LIST_FOR_EDIT_ICE;vmmiPHB_tab_info.cur_tab = TAB_PHB_GENERAL;mmiPHB_tab_list_mask_tab(TAB_PHB_GROUP);mmiPHB_tab_list_entry(mmiPHB_ice_edit_entry_general,MMI_PHB_ENTRY_FIELD_NUMBER| MMI_PHB_ENTRY_FIELD_HOME| MMI_PHB_ENTRY_FIELD_OFFICE| MMI_PHB_ENTRY_FIELD_FAX);}#endif/***************************************************************************** * FUNCTION* mmi_phb_option_ice_access_phb_highlight* DESCRIPTION* Highlight handler for "directory" in ice list* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ static void mmi_phb_option_ice_access_phb_highlight(void){//SetLeftSoftkeyFunction(mmiPHB_ice_edit_entry_general, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_ice_option_back* DESCRIPTION** PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ static void mmi_phb_ice_option_back(void){GoBackToHistory(SCR_ID_ICE_LIST);}/***************************************************************************** * FUNCTION* mmi_phb_ice_option_edit_back_highlight* DESCRIPTION* Highlight handler for "back" in ice edit screen* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ static void mmi_phb_ice_option_edit_back_highlight(void){SetLeftSoftkeyFunction(mmi_phb_ice_option_back, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_ice_option_edit_confirm_highlight* DESCRIPTION* Highlight handler for "confirm" in ice edit screen* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ static void mmi_phb_ice_option_edit_confirm_highlight(void){SetLeftSoftkeyFunction(mmi_phb_ice_edit_process, KEY_EVENT_UP);}/****************************************************************************** ***Function name : mmiPHB_tab_list_my_favourite_add_option**** Description : add my favourite number option******Input : none****Output : none******************************************************************************* /static void mmi_phb_edit_ICE_option(void){U8* guiBuffer = NULL;U16 nStrItemList[MAX_SUB_MENUS] = {0};U16 nNumofItem;EntryNewScreen(SCR_ID_EDIT_ICE_NUM_OPTION, NULL, NULL, NULL);guiBuffer = GetCurrGuiBuffer(SCR_ID_EDIT_ICE_NUM_OPTION);#if 0 ///*Merge ICE_NUMBER from Piano*/SetHiliteHandler(MENU_ID_PHB_GROUP_MEMBER_ADD_ACCESS_PHB,mmi_phb_option_ice_access_phb_highlight);SetHiliteHandler(MENU_ID_PHB_GROUP_MEMBER_ADD_CONFIRM,mmi_phb_ice_option_edit_confirm_highlight);SetHiliteHandler(MENU_ID_PHB_GROUP_MEMBER_ADD_BACK,mmi_phb_ice_option_edit_back_highlight);nNumofItem = GetNumOfChild(MENU_ID_PHB_GROUP_MEMBER_ADD_OPTION);GetSequenceStringIds(MENU_ID_PHB_GROUP_MEMBER_ADD_OPTION, nStrItemList);SetParentHandler(MENU_ID_PHB_GROUP_MEMBER_ADD_OPTION);#endifRegisterHighlightHandler(ExecuteCurrHiliteHandler);ShowCategoryCtxScreen(STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,STR_GLOBAL_OK, IMG_GLOBAL_OK,STR_GLOBAL_BACK,IMG_GLOBAL_BACK,nNumofItem, nStrItemList, 0, 0, guiBuffer);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_entry_add_ice_number* DESCRIPTION* edit ice number* PARAMETERS* void* RETURNS* void*****************************************************************************/ void mmi_phb_entry_add_ice_number(void){g_phb_ice_info.m_ice_be_edit_number = TRUE;mmi_phb_entry_edit_ICE_number_screen();}/***************************************************************************** * FUNCTION* mmi_phb_entry_edit_ice_number* DESCRIPTION* edit ice number* PARAMETERS* void* RETURNS* void*****************************************************************************/ void mmi_phb_entry_edit_ice_number(void){g_phb_ice_info.m_ice_be_edit_number = TRUE;mmi_phb_entry_edit_ICE_number_screen();}/***************************************************************************** * FUNCTION* mmi_phb_edit_ICE_number* DESCRIPTION* edit ice number* PARAMETERS* index: the index of ICE* RETURNS* void*****************************************************************************/ void mmi_phb_entry_edit_ICE_number_screen(void){U8* guiBuffer = NULL;S16 buffer_len = 0;multiline_inputbox_category_history *h = NULL;EntryNewScreen(SCR_ID_EDIT_ICE_NUM, NULL, mmi_phb_entry_edit_ICE_number_screen, NULL);guiBuffer = GetCurrGuiBuffer(SCR_ID_EDIT_ICE_NUM);if (guiBuffer == NULL){memset(m_phb_ice_edit_input_buff,0, (MAX_PB_NUMBER_LENGTH + 1) * ENCODING_LENGTH);if (strlen(g_phb_ice_info.number[m_current_ice_number_index]) > 0){AnsiiToUnicodeString((S8 *) m_phb_ice_edit_input_buff, (S8 *) g_phb_ice_info.number[m_current_ice_number_index]);}}else{buffer_len = mmi_ucs2strlen((S8*)m_phb_ice_edit_input_buff)*ENCODING_LENGTH + ENCODING_LENGTH;h = (multiline_inputbox_category_history*) guiBuffer;if(h->text_length != buffer_len){guiBuffer = NULL;}}ShowCategory5Screen_ext(STR_ENTER_PHONE_NUMBER_CAPTION, 0,STR_GLOBAL_CONFIRM, 0,STR_GLOBAL_BACK, 0,IMM_INPUT_TYPE_PHONE_NUMBER,(U8*)m_phb_ice_edit_input_buff,MAX_PB_NUMBER_LENGTH+1, guiBuffer,0, NULL);SetLeftSoftkeyFunction(mmi_phb_ice_edit_process, KEY_EVENT_UP);SetCategory5RightSoftkeyFunction(mmi_phb_ice_option_back, KEY_EVENT_UP);SetKeyHandler(mmi_phb_ice_edit_process , KEY_ENTER , KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_edit_ICE_number* DESCRIPTION* edit ice number* PARAMETERS* index: the index of ICE* RETURNS* void*****************************************************************************/ void mmi_phb_op_delete_ice_number(void){S16 err = 0;NVRAM_PHB_ICE_NUM_INFO_STRUCT ice_info = {0};DisplayPopup((PU8)GetString(STR_GLOBAL_DONE), IMG_GLOBAL_ACTIV A TED,TRUE, PHB_NOTIFY_TIMEOUT, SUCCESS_TONE);memset(ice_info.number, 0, (MAX_PB_NUMBER_LENGTH + 1) );memset(g_phb_ice_info.number[m_current_ice_number_index], 0 , MAX_PB_NUMBER_LENGTH+1);WriteRecord(NVRAM_EF_PHB_ICE_NUM_LID,m_current_ice_number_index+1,(void*)&ice_info,NVRAM_PHB_ICE_NUM_LID_SIZE,&err);}/****************************************************************************** ***Function name : mmi_phb_ice_delete_number_confirm**** Description : entry delete confirm screen******Input : none****Output : none******************************************************************************* /void mmi_phb_ice_delete_number_confirm(void){DisplayConfirm(STR_GLOBAL_YES, IMG_GLOBAL_YES,STR_GLOBAL_NO, IMG_GLOBAL_NO,get_string(STR_DELETE_QUERY_MSG),IMG_GLOBAL_QUESTION, W ARNING_TONE);SetLeftSoftkeyFunction(mmi_phb_op_delete_ice_number, KEY_EVENT_UP);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_exit_ice_number* DESCRIPTION* Exit function of mmi_phb_exit_ice_number()* PARAMETERS* void* RETURNS* void*****************************************************************************/ void mmi_phb_exit_ice_number(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*//*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/#if 0 ///*For Compile OK*/if (g_phb_cntx.start_scr_id == 0){g_phb_cntx.start_scr_id = GetCurrScrnId();}g_phb_cntx.end_scr_id = SCR_ID_ICE_LIST;#endif}/***************************************************************************** * FUNCTION* mmi_phb_ice_highlight_handler* DESCRIPTION* ice list highlight handler* PARAMETERS* void* RETURNS* void*****************************************************************************/ void mmi_phb_ice_highlight_handler(S32 nIndex){m_current_ice_number_index = nIndex;if (strlen(g_phb_ice_info.number[m_current_ice_number_index]) > 0){SetKeyHandler(mmi_phb_entry_op_view_ICE , KEY_ENTER , KEY_EVENT_UP);}else{SetKeyHandler(mmi_phb_entry_add_ice_number , KEY_ENTER , KEY_EVENT_UP);}}/***************************************************************************** * FUNCTION* mmi_phb_list_get_item* DESCRIPTION** PARAMETERS* item_index [IN]* str_buff [IN]* img_buff_p [?]* str_img_mask [IN]* RETURNS******************************************************************************/ pBOOL mmi_phb_ice_list_get_item(S32 item_index, UI_string_type str_buff, PU8 *img_buff_p, U8 str_img_mask){#if 0/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*/U16 store_index;/*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/if ((item_index < 0) || (item_index >= MAX_ICE_NUMBER_COUNT)){return FALSE;}store_index = g_phb_name_index[item_index];if (mmi_ucs2strlen((S8*) PhoneBook[store_index].alpha_)){mmi_ucs2cpy((S8*) str_buff, (S8*) PhoneBook[store_index].alpha_);}else{/*For Compile OK*/mmi_phb_convert_get_ucs2_number((S8*) str_buff, store_index);}if (store_index >= MAX_PB_PHONE_ENTRIES){*img_buff_p = get_image(IMG_STORAGE_SIM);}else{*img_buff_p = get_image(IMG_STORAGE_HANDSET);}#endifreturn TRUE;}/***************************************************************************** * FUNCTION* mmi_phb_entry_ice_number_list* DESCRIPTION* entry ice number list* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_entry_ice_number_list(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*/U8 *names[MAX_PB_OWNER_NUMBERS];U16 i;U8 *guiBuffer;U8 ice_count = 0;/*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/EntryNewScreen(SCR_ID_ICE_LIST, mmi_phb_exit_ice_number, mmi_phb_entry_ice_number_list, NULL);guiBuffer = GetCurrGuiBuffer(SCR_ID_ICE_LIST);g_phb_ice_info.m_ice_count = 0;g_ice_should_add = MMI_FALSE;for (i = 0; i < MAX_ICE_NUMBER_COUNT; i++){/* reset subMenuDataPtrs before use */subMenuDataPtrs[i] = subMenuData[i];memset((S8*)subMenuDataPtrs[i], 0, MAX_SUB_MENU_SIZE);names[i] = (PU8) GetString(STR_ID_PHB_ICE_ONE+i);if (strlen(g_phb_ice_info.number[i])){//AnsiiNToUnicodeString((S8*) subMenuDataPtrs[i], (S8*)g_phb_ice_info.number[i] , MAX_SUB_MENU_SIZE/ENCODING_LENGTH);mmi_asc_n_to_ucs2((S8*) subMenuDataPtrs[i], (S8*)g_phb_ice_info.number[i] , MAX_SUB_MENU_SIZE/ENCODING_LENGTH);ice_count++;g_phb_ice_info.m_ice_count++;}}RegisterHighlightHandler(mmi_phb_ice_highlight_handler);ShowCategory53Screen(STR_ID_PHB_ICE_NUMBER,GetRootTitleIcon(MAIN_MENU_PHONEBOOK_MENUID),//IMG_SCR_PBOOK_CAPTION, STR_GLOBAL_OPTIONS,IMG_GLOBAL_OPTIONS,STR_GLOBAL_BACK,IMG_GLOBAL_BACK,MAX_ICE_NUMBER_COUNT,names,(U16*) gIndexIconsImageList,subMenuDataPtrs,0,0,guiBuffer);DeleteScreenIfPresent(SCR_ID_CONTACT_MANAGE);SetLeftSoftkeyFunction(mmi_phb_entry_ice_option, KEY_EVENT_UP);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);SetKeyHandler(mmi_phb_choose_number_ice, KEY_SEND, KEY_EVENT_UP);#ifdef MMI_DYNAMIC_NA VIGA TON_INDICA TOR//redraw_navigation_indicator(); /*For Compile OK*/#endif}/****************************************************************************** ***Function name : mmi_phb_entry_ice_option**** Description : entry delete confirm screen******Input : none****Output : none******************************************************************************* /void mmi_phb_entry_ice_option(void){U8* guiBuffer;U16 nStrItemList[MAX_SUB_MENUS];U16 nNumofItem;U32 mask = 0, HideItemId = -1;EntryNewScreen(SCR_ID_ICE_OPTION, NULL, NULL, NULL);guiBuffer = GetCurrGuiBuffer(SCR_ID_ICE_OPTION);if (strlen(g_phb_ice_info.number[m_current_ice_number_index]) > 0){mmi_frm_hide_menu_item(MENU_ID_PHB_ICE_OPTION_ADD);mmi_frm_unhide_menu_item(MENU_ID_PHB_ICE_OPTION_EDIT);mmi_frm_unhide_menu_item(MENU_ID_PHB_ICE_OPTION_DELETE);}else{mmi_frm_unhide_menu_item(MENU_ID_PHB_ICE_OPTION_ADD);mmi_frm_hide_menu_item(MENU_ID_PHB_ICE_OPTION_EDIT);mmi_frm_hide_menu_item(MENU_ID_PHB_ICE_OPTION_DELETE);}nNumofItem = GetNumOfChild_Ext(MENU_ID_PHB_ICE_LIST_OPTION);GetSequenceStringIds_Ext(MENU_ID_PHB_ICE_LIST_OPTION, nStrItemList);SetParentHandler(MENU_ID_PHB_ICE_LIST_OPTION);RegisterHighlightHandler(ExecuteCurrHiliteHandler);ShowCategoryCtxScreen(STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,STR_GLOBAL_OK, IMG_GLOBAL_OK,STR_GLOBAL_BACK, IMG_GLOBAL_BACK,nNumofItem, nStrItemList, mask, 0, guiBuffer);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_ice_option_view_highlight* DESCRIPTION* Highlight handler for "view" in ice list* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_ice_option_view_highlight(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*//*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/SetLeftSoftkeyFunction(mmi_phb_entry_op_view_ICE, KEY_EVENT_UP);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_ice_option_add_highlight* DESCRIPTION* Highlight handler for "add" in ice list* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_ice_option_add_highlight(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*//*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/SetLeftSoftkeyFunction(mmi_phb_entry_add_ice_number, KEY_EVENT_UP);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}/***************************************************************************** * FUNCTION* mmi_phb_ice_option_edit_highlight* DESCRIPTION* Highlight handler for "edit" in ice list* PARAMETERS* void* RETURNS* the description of return value, if any.(?)*****************************************************************************/ void mmi_phb_ice_option_edit_highlight(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*//*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/SetLeftSoftkeyFunction(mmi_phb_entry_edit_ice_number, KEY_EVENT_UP);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}void mmi_phb_ice_option_delete_highlight(void){/*----------------------------------------------------------------*//* Local V ariables *//*----------------------------------------------------------------*//*----------------------------------------------------------------*//* Code Body *//*----------------------------------------------------------------*/SetLeftSoftkeyFunction(mmi_phb_op_delete_ice_number, KEY_EVENT_UP);SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
服务器端代码:主要包括几个大的类。
Ice::Communicator类:
Ice run time的主要进入点是由本地接口
Ice::Communicator来表示的。
和在客户端一样,在你在服务器中做任何别的事情之前,你必须调用
Ice::initialize,对Ice run time进行初始化。
Ice::initialize 返回一个智能指针,指向一个Ice::Communicator实例:int main(int argc, char * argv[])
{
Ice::CommunicatorPtr ic = Ice::initialize(argc, argv); // ...
}
在离开你的main函数之前,你必须调用Communicator::destroy。
destroy操作负责结束Ice run time。
特别地,destroy会等待任何还在运行
的操作调用完成。
此外,destroy还会确保任何还未完成的线程都得以汇合(joined),并收回一些操作系统资源,比如文件描述符和内存。
决不要让你的main函数不先调用destroy就终止;这样做会导致不确定的行为。
Ice::Application类:
#include <Ice/Ice.h>
class MyApplication : virtual public Ice::Application { public:
virtual int run(int, char * []) { //主要是来实现该run 的方法。
// Server code here...
return 0;
}
};
int
main(int argc, char * argv[])
{
MyApplication app;
return app.main(argc, argv);
}
Ice::Service类:
使用Ice::Service类的Ice应用至少要定义一个子类,并重新定义 start成员函数;服务必须在这个函数里执行其启动活动,比如处理命令
行参数、创建对象适配器、注册servants。
应用的main 函数必须实例化这个子类,调用其main成员函数,把程序的参数向量作为参数传给它。
下面的例子给出了一个最小限度的Ice::Service子类:
#include <Ice/Ice.h>
#include <Ice/Service.h>
class MyService : public Ice::Service {
protected:
virtual bool start(int, char * []);
private:
Ice::ObjectAdapterPtr _adapter;
};
bool MyService::start(int argc, char * argv[])
{
_adapter
= communicator()->createObjectAdapter("MyAdapt er");
_adapter->addWithUUID(new MyServantI); //用UUID来指定1个servant。
_adapter->activate(); //1个适配器包含1个servant还是多个?
return true;
}
int main(int argc, char * argv[])
{
MyService svc;
return svc.main(argc, argv);
}
linux守护进程命令行:--daemon,--noclose(阻止ice::service关闭无用的文件描述符),--nochdir(阻止ice::service变更当前目录)
Servant类:继承于ice::object类。