Exemplo n.º 1
0
 public AMQProtocolProvider()
 {
     _factory = new DemuxingProtocolCodecFactory();
     _factory.Register(new AMQDataBlockEncoder());
     _factory.Register(new AMQDataBlockDecoder());
     _factory.Register(new ProtocolInitiation.Decoder());
 }
Exemplo n.º 2
0
        /// <summary>
        /// 初始化Socket服务
        /// </summary>
        private void InitializeSocketService()
        {
            var acceptor = new AsyncSocketAcceptor();
            acceptor.SessionConfig.ReadBufferSize = 2048;
            acceptor.SessionConfig.SetIdleTime(IdleStatus.BothIdle, 10);

            // 添加过滤器
            var demuxingCodec = new DemuxingProtocolCodecFactory();
            demuxingCodec.AddMessageEncoder<ITransferingZipFile, TransferingZipFileProtocolEncoder>();
            demuxingCodec.AddMessageEncoder<IUpdateFileCollection, UpdateFileCollectionProtocolEncoder>();
            demuxingCodec.AddMessageDecoder<ClientInfoProtocolDecoder>();
            demuxingCodec.AddMessageDecoder<FileHashesProtocolDecoder>();
            acceptor.FilterChain.AddLast("codec", new ProtocolCodecFilter(demuxingCodec));
            acceptor.FilterChain.AddLast("logger", new LoggingFilter());

            // 添加业务逻辑
            var demuxingHandler = new DemuxingIoHandler();
            demuxingHandler.AddReceivedMessageHandler(new ClientInfoMessageHandler((s, o) =>
            {
                // TODO 服务器收到客户端发来的客户端信息后,校验MachineID,AppBranchID,
                // Serial,Expiration等信息(见数据库,见AppUpdateServer.Models.ClientInfo类),
                // 将更新文件名列表发给客户端
            }));
            demuxingHandler.AddReceivedMessageHandler(new FileHashesMessageHandler((s, o) =>
            {
                // TODO 服务器收到客户端发来的文件Hash后,在服务器端对比Hash,并将Hash不同的文件打包成压缩包发送给客户端
            }));
            acceptor.Handler = demuxingHandler;

            Container.RegisterInstance<IoAcceptor>(acceptor, new ContainerControlledLifetimeManager());
        }
Exemplo n.º 3
0
        /// <summary>
        /// 初始化Socket服务
        /// </summary>
        private void InitializeSocketService()
        {
            var connector = new AsyncSocketConnector();
            connector.SessionConfig.ReadBufferSize = 2048;
            connector.SessionConfig.SetIdleTime(IdleStatus.BothIdle, 10);

            // 添加过滤器
            var demuxingCodec = new DemuxingProtocolCodecFactory();
            demuxingCodec.AddMessageEncoder<IClientInfo, ClientInfoProtocolEncoder>();
            demuxingCodec.AddMessageEncoder<IList<IFileHash>, FileHashesProtocolEncoder>();
            demuxingCodec.AddMessageDecoder<TransferingZipFileProtocolDecoder>();
            demuxingCodec.AddMessageDecoder<UpdateFileCollectionProtocolDecoder>();
            connector.FilterChain.AddLast("codec", new ProtocolCodecFilter(demuxingCodec));
            connector.FilterChain.AddLast("logger", new LoggingFilter());

            // 添加业务逻辑
            var demuxingHandler = new DemuxingIoHandler();
            demuxingHandler.AddReceivedMessageHandler(new UpdateFileCollectionMessageHandler((s, o) =>
            {
                //客户端收到服务器发来的更新文件名列表后,显示更新信息,分析本地文件、计算本地文件Hash,并发给服务器

                //通知ViewModel更新UpdateInfo属性
                var aggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
                aggregator.GetEvent<UpdateFileCollectionEvent>().Publish(o);

                //获取目标应用路径的绝对路径
                var appFolder = Settings.Default.TargetApplicationFolder;
                appFolder = Path.GetFullPath(appFolder);
                if (!Directory.Exists(appFolder))
                {
                    // TODO 目标目录不存在
                    //MessageBox.Show("目标目录不存在");
                }

                //计算Hash
                var fileHashes = new List<IFileHash>();
                foreach (var file in o)
                {
                    var filePath = Path.Combine(appFolder, file);
                    var fileHash = new FileHash { FileName = file };
                    if (File.Exists(filePath))
                    {
                        fileHash.HashBytes = FileHashHelper.ComputeFileHash(filePath);
                    }
                    fileHashes.Add(fileHash);
                }
                s.Write(fileHashes);
            }));
            demuxingHandler.AddReceivedMessageHandler(new TransferingZipFileMessageHandler((s, o) =>
            {
                // TODO 客户端收到服务器发来的更新文件压缩包后,停止正在运行的应用程序,备份旧文件,覆盖新文件

            }));
            connector.Handler = demuxingHandler;

            Container.RegisterInstance<IoConnector>(connector, new ContainerControlledLifetimeManager());
        }