zoukankan      html  css  js  c++  java
  • ICE提纲之demo/IceStorm/clock(发布者/订阅者)

    ICE发布者/订阅者的一个最简单例子

    IceStorm服务

    启动命令

    $ /Library/Developer/Ice-3.5.1/bin/icebox --Ice.Config=config.icebox

    config.icebox

    #
    # The IceBox server endpoint configuration. This endpoint is only used
    # to communicate with the IceBox ServiceManager object (such as when
    # using iceboxadmin to shutdown the server).
    #
    # The IceStorm service has its own endpoints (see config.service).
    #
    IceBox.ServiceManager.Endpoints=tcp -h localhost -p 9998
    
    #
    # The IceStorm service. The service is configured using a separate
    # configuration file (see config.service).
    #
    IceBox.Service.IceStorm=IceStormService,35:createIceStorm --Ice.Config=config.service

    config.service

    #
    # The IceStorm service instance name.
    #
    IceStorm.InstanceName=DemoIceStorm
    
    #
    # This property defines the endpoints on which the IceStorm
    # TopicManager listens.
    #
    IceStorm.TopicManager.Endpoints=default -h localhost -p 10000
    
    #
    # This property defines the endpoints on which the topic
    # publisher objects listen. If you want to federate
    # IceStorm instances this must run on a fixed port (or use
    # IceGrid).
    #
    IceStorm.Publish.Endpoints=tcp -h localhost -p 10001:udp -h localhost -p 10001

    Slice

    Clock.ice

    module Demo
    {
    
    interface Clock
    {
        void tick(string time);
    };
    
    };

    发布者

    config.pub

    #
    # This property is used by the clients to connect to IceStorm.
    #
    TopicManager.Proxy=DemoIceStorm/TopicManager:default -h localhost -p 10000

    Publisher.cpp

    int
    Publisher::run(int argc, char* argv[])
    {
        IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(
            communicator()->propertyToProxy("TopicManager.Proxy"));
    
        //
        // Retrieve the topic.
        //
        string topicName = "time";
        IceStorm::TopicPrx topic;
        topic = manager->create(topicName);
        // or
        topic = manager->retrieve(topicName);
    
        //
        // Get the topic's publisher object, and create a Clock proxy
        //
        Ice::ObjectPrx publisher = topic->getPublisher();
        
        ClockPrx clock = ClockPrx::uncheckedCast(publisher);
    
        while(true)
        {
            clock->tick(IceUtil::Time::now().toDateTime());
            IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(1));
        }
    }

    订阅者

    config.sub

    #
    # This property is used to configure the endpoints of the clock
    # subscriber adapter. These endpoints are where the client receives
    # topic messages from IceStorm.
    #
    Clock.Subscriber.Endpoints=tcp:udp
    
    #
    # This property is used by the clients to connect to IceStorm.
    #
    TopicManager.Proxy=DemoIceStorm/TopicManager:default -h localhost -p 10000

    Subscriber.cpp

    class ClockI : public Clock
    {
    public:
    
        virtual void
        tick(const string& time, const Ice::Current&)
        {
            cout << time << endl;
        }
    };
    
    int
    Subscriber::run(int argc, char* argv[])
    {
        string topicName = "time";
    
        IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(
            communicator()->propertyToProxy("TopicManager.Proxy"));
    
        IceStorm::TopicPrx topic;
        topic = manager->retrieve(topicName);
        // or
        topic = manager->create(topicName);
    
        Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Clock.Subscriber");
    
        //
        // Add a servant for the Ice object. If --id is used the identity
        // comes from the command line, otherwise a UUID is used.
        //
        // id is not directly altered since it is used below to detect
        // whether subscribeAndGetPublisher can raise AlreadySubscribed.
        //
        Ice::Identity subId;
        Ice::ObjectPrx subscriber = adapter->add(new ClockI, subId);
    
        //
        // Activate the object adapter before subscribing.
        //
        adapter->activate();
    
        IceStorm::QoS qos;
        qos["retryCount"] = retryCount;
        qos["reliability"] = "ordered";
    
        topic->subscribeAndGetPublisher(qos, subscriber);
    
        shutdownOnInterrupt();
        communicator()->waitForShutdown();
    
        topic->unsubscribe(subscriber);
    }
  • 相关阅读:
    C#趣味程序---车牌号推断
    使用 C# 开发智能手机软件:推箱子(十四)
    【Oracle错误集锦】:ORA-12154: TNS: 无法解析指定的连接标识符
    java中你确定用对单例了吗?
    linux tty设置详解
    tty linux 打开和设置范例
    C和C++之间库的互相调用
    Android 编译参数 LOCAL_MODULE_TAGS
    pthread_once 和 pthread_key
    Android系统root破解原理分析
  • 原文地址:https://www.cnblogs.com/leaf-w/p/3786387.html
Copyright © 2011-2022 走看看