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);
    }
  • 相关阅读:
    关于 platform的文章
    S3C2440驱动篇—Linux平台设备驱动
    class_create(),class_device_create()或device_create()自动创建设备文件结点
    耳机接线图
    GNOME图形界面
    ssh登录过程中 出现 unsupport gssapiauthentication及pscp传输文件出现 ssh_init: Network error: Cannot assign requested address错误
    du和df 的使用及区别
    bash中的set指令使用说明
    qemuimg dd使用
    linux lvm卷的总结,在proxmox 5下测试验证
  • 原文地址:https://www.cnblogs.com/leaf-w/p/3786387.html
Copyright © 2011-2022 走看看