MessageClient
using Manager.Common;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text; namespace ExchangeManager.WCF
{
public class MessageClient
{
private RelayEngine<MessageCollection> _MessageRelayEngine;
private MessageReceiver _MessageReceiver;
private Stopwatch stopwatch = new Stopwatch(); public MessageClient()
{
this._MessageRelayEngine = new RelayEngine<MessageCollection>(this.ProcessMessage, this.HandleException);
this._MessageRelayEngine.Suspend();
this._MessageReceiver = new MessageReceiver(this._MessageRelayEngine);
}
public void StartMessageProcess(string hostName, int messageDispatchListenPort, string sessionId)
{
this._MessageReceiver.Start(hostName, messageDispatchListenPort, sessionId);
this._MessageRelayEngine.Resume();
}
public void SendMessage(byte[] data)
{
try
{
this._MessageRelayEngine.AddItem(CompressHelper.FromByteArray<MessageCollection>(data));
ConsoleClient.Instance.RefreshLastMsgTime();
}
catch (Exception ex) { }
} public void Stop()
{
this._MessageReceiver.Stop();
this._MessageRelayEngine.Suspend();
} //接受服务端消息
private bool ProcessMessage(MessageCollection message)
{
try
{
App.MainFrameWindow.Dispatcher.BeginInvoke((Action)delegate()
{
try
{
stopwatch.Restart();
this.Process(message);
stopwatch.Stop();
//MessageStatistics.Instance.AddItem(message.GetType().Name, stopwatch.ElapsedMilliseconds);
if (stopwatch.ElapsedMilliseconds > 50)
{
//Logger.TraceEvent(TraceEventType.Error, "MessageClient Dispatcher Message type:{0}\r\n{1}", message.GetType().Name, stopwatch.ElapsedMilliseconds);
}
}
catch (Exception exception)
{
//Logger.TraceEvent(TraceEventType.Error, "MessageClient Dispatcher Message type:{0}\r\n{1}", message.GetType().Name, exception);
}
});
}
catch (Exception exception) { }
return true;
} private void Process(MessageCollection messages)
{
foreach (Message item in messages.Messages)
{
this.Process((dynamic)item);
}
} private void Process(PriceMessage message)
{
try
{
//处理消息
App.MainFrameWindow.PriceLable.Content = message.Price;
}
catch (Exception ex)
{
this.HandleException(ex);
}
} private void HandleException(Exception exception)
{
}
}
}
MessageClient的更多相关文章
- 如何站在使用者的角度来设计SDK-微信公众号开发SDK(消息处理)设计之抛砖引玉
0.SDK之必备的基本素质 在项目中免不了要用到各种各样的第三方的sdk,在我现在的工作中就在公司内部积累了各种各样的的公共库(基于.net的,基于silverlight的等等),托管到了内部的nug ...
- Android IPC机制之Messenger
Messenger:两个进程通过Messenger传递消息,进程1和进程2中都需要创建一个Messenger,创建过程:首先进程2需要创建一个服务, 并在服务中创建一个Messenger对象,进程1通 ...
- Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...
- ActiveMQ安装与使用
一 .安装运行ActiveMQ: 1.下载activemq wget http://archive.apache.org/dist/activemq/apache-activemq/5.9.0/apa ...
- 在线教学、视频会议 Webus Fox(3) 客户端开发手册
本文主要介绍webus fox 客户端的配置及接口说明. 1. 文件列表和配置 1.1 文件列表 1.2 common.xml 配置 根据服务器端的部署, 替换[ServerUrl] , [RtmpP ...
- Android 基于Netty的消息推送方案之字符串的接收和发送(三)
在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...
- 使用WeCloud消息推送接口发送消息NodeJs版
WeCloud是一家初创公司的产品,眼下主要在做Android和IOS消息推送这块.他们提供了用于向设备发送消息的协议,详细协议内容见消息推送协议. 这篇文章将使用NodeJs基于这个推送协议完毕向A ...
- Android 基于Netty接收和发送推送解决方案的消息字符串(三)
在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> .我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...
- ZBUS = MQ + RPC
http://git.oschina.net/rushmore/zbus http://my.oschina.net/sbz/blog Readme.md 18.02 KB ZBUS = MQ + ...
随机推荐
- 设计模式之六大原则——迪米特法则(LoD,LKP)
转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793000.html 定义: 迪米特法则(Law of Demeter,LoD)也 ...
- Mybatis学习记录
参考资料: <深入理解mybatis原理> MyBatis的架构设计以及实例分析
- jquery数组(排序)
sort(); html: <h3>字符串数组排序前</h3> <div id="show1"></div> <h3>排 ...
- jdbc向各种数据库发送sql语句
1.有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事.换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Info ...
- 阿里云服务器Linux CentOS安装配置(十)安装Discuz
0.登录阿里云,停止实例,重新初始化磁盘. 如果不这么做,安装的discuz页面样式丢失,没法解决. 1.安装apache yum install httpd httpd-devel -y 2.安装m ...
- JavaScript自学之数组排序
<html> <head> <title>数组排序</title> <script type="text/javascript" ...
- http请求,普通的get和post方法
在http://www.cnblogs.com/ITtangtang/p/3968093.html的基础上封装了一下get和post请求的常用方法, 虽然很简单,也晒晒 import org.apac ...
- Tp验证码:$Verify = new \Think\Verify(); $Verify->entry(n);【参数n,页面有多个验证码时用】
一.验证码参数:(中文字符集和英文字符集在父类里面都可以取到,可修改) //1.生成验证码 $Verify = new \Think\Verify(); $Verify->entry(n);[参 ...
- 微信小程序时代已经来临
昨天估计微信公众号上产生了第一篇最快的30万+文章,10万+只花了10多分钟.就是冯大辉(著名Oracle专家,知名博主)同学的「微信应用号来了」. 为什么这么一篇如此简单又技术类的文章一下能刷遍朋友 ...
- Ubuntu16.04安装docker
1.检查内核版本uname -r,如果是16.04则可以跳过这一步,因为docker只能运行在64-bit linux 内核3.10或高于3.10的系统中. 2.更新apt sources sudo ...