03-ice服务端

最近用到了ice,所以简单记录下。

编写ice文件

1、编写Ice 应用的第一步是要编写一个Slice 定义,其中含有应用所
用的各个接口。我的测试ice文件如下:

#include <Ice/Identity.ice> 
module ServiceModule{ 
	// 建立连接结构
	class IConnectInfo {	
		["cpp:type:wstring"]	
		string ID;			
	}; 

	class IReturnInfo {
		bool IsSuccess;		// 是否成功 
		["cpp:type:wstring"]
		string Info;		// 信息	
	};  

	/* 客户端实现 */
	interface PublishClient {
	// 控制
	IReturnInfo Control(string type); 
	};

	/* 服务端实现 */
	interface PublishServer { 
	
	// 1.0建立连接
	 IReturnInfo ConnectToServer(Ice::Identity ident, IConnectInfo info);   
	};
};

服务端实现

1、创建一个servant 类,类名为ControlServer.cs

    /// <summary>
    /// 继承自叫作PublishServerDisp_ 的基类,这个基类由slice2cs编译器生成,其中含有一个ConnectToServer方法.
    /// </summary>
    public class ControlServer : PublishServerDisp_
    {
        /// <summary>
        ///  建立连接
        /// </summary>
        public override IReturnInfo ConnectToServer(Identity ident, IConnectInfo info, Current current__)
        {
            Ice.ObjectPrx @base = current__.con.createProxy(ident);

            PublishClientPrx client = PublishClientPrxHelper.checkedCast(@base);
            if (client != null)
            {
                IceServerApplication.OneclientPrx = client;
            }
            IReturnInfo returnInfo = new IReturnInfo
            {
                Info = "ICE连接",
                IsSuccess = true
            };
            return returnInfo;
        }
    }
}

2、创建IceServerApplication.cs,继承Ice.Application。

    /// <summary>
    /// 参考:http://blog.chinaunix.net/uid-126438-id-2924656.html
    /// 服务器端通常只有一个通信器(Ice::Communicator),通信器包含了一系列的资源:
    /// 如线程池、配置属性、对象工厂、日志记录、统计对象、路由器、定位器、插件管理器、对象适配器在通信器内
    /// 包含有一个或更多的对象适配器(Ice::ObjectAdapter),对象适配器负责提供一个或多个传输端点,
    /// 并且把进入的请求分 派到对应的servant中去执行。
    /// 具体实现的部分称为servant,它们为客户端发来的调用提供服务。
    /// servant向对象适配器注册以后,由对象适配器依据客户请求调用相应方法。
    /// </summary>
public class IceServerApplication : Ice.Application
    {
        public static PublishClientPrx  OneclientPrx = null;
        ObjectAdapter adapter = null;
        public override int run(string[] args)
        {
            ControlServer control = new ControlServer();
            if (args.Length > 1)
            {
                System.Console.Error.WriteLine(appName() + ": too many arguments");
                return 1;
            }
            // //创建名为Callback.Server的适配器
            adapter = communicator().createObjectAdapter("Callback.Server");
            //将服务单元增加到适配器中,并给服务对象指定名称为CallbackServer,该名称用于唯一确定一个服务单元
            adapter.add(control, communicator().stringToIdentity("CallbackServer")); 
            //激活适配器,这样做的好处是可以等到所有资源就位后再触发
            adapter.activate(); 
            //让服务在退出之前,一直持续对请求的监听
            communicator().waitForShutdown();
            return 0;
        }

        public void close()
        {
            if (adapter != null)
            {
                communicator().destroy();
            }
        }
    }

3、Program.cs

class Program
    {
        static IceServerApplication app = null;
        static void Main(string[] args)
        {
            app = new IceServerApplication();
            Thread t = new Thread(new ThreadStart(start));
            t.Start();
            Console.WriteLine("服务已开启!");
            Console.ReadKey();
        }

        private static void start()
        {
            //ice配置文件
            app.main(new string[] { }, "config.server");
        }
    }

4、config.server
在这里插入图片描述
5、参考
https://www.cnblogs.com/T-J-D/p/3849870.html
http://blog.chinaunix.net/uid-126438-id-2924656.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值