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的更多相关文章

  1. 如何站在使用者的角度来设计SDK-微信公众号开发SDK(消息处理)设计之抛砖引玉

    0.SDK之必备的基本素质 在项目中免不了要用到各种各样的第三方的sdk,在我现在的工作中就在公司内部积累了各种各样的的公共库(基于.net的,基于silverlight的等等),托管到了内部的nug ...

  2. Android IPC机制之Messenger

    Messenger:两个进程通过Messenger传递消息,进程1和进程2中都需要创建一个Messenger,创建过程:首先进程2需要创建一个服务, 并在服务中创建一个Messenger对象,进程1通 ...

  3. Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger

    Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...

  4. ActiveMQ安装与使用

    一 .安装运行ActiveMQ: 1.下载activemq wget http://archive.apache.org/dist/activemq/apache-activemq/5.9.0/apa ...

  5. 在线教学、视频会议 Webus Fox(3) 客户端开发手册

    本文主要介绍webus fox 客户端的配置及接口说明. 1. 文件列表和配置 1.1 文件列表 1.2 common.xml 配置 根据服务器端的部署, 替换[ServerUrl] , [RtmpP ...

  6. Android 基于Netty的消息推送方案之字符串的接收和发送(三)

    在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

  7. 使用WeCloud消息推送接口发送消息NodeJs版

    WeCloud是一家初创公司的产品,眼下主要在做Android和IOS消息推送这块.他们提供了用于向设备发送消息的协议,详细协议内容见消息推送协议. 这篇文章将使用NodeJs基于这个推送协议完毕向A ...

  8. Android 基于Netty接收和发送推送解决方案的消息字符串(三)

    在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> .我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

  9. ZBUS = MQ + RPC

    http://git.oschina.net/rushmore/zbus http://my.oschina.net/sbz/blog  Readme.md 18.02 KB ZBUS = MQ + ...

随机推荐

  1. spring装配---处理自动装配的歧义性

    一.歧义性 当我们使用spring的注解进行自动装配bean时,如果不仅有一个bean能够匹配结果的话,会抛出NoUniqueBeanDefinitionException: 例如本例中 当sprin ...

  2. 加速下载gradle

    http://www.jianshu.com/p/e887203e30f6 另外idea runconfiguration里边 gradle project要选项目根目录,而不是build脚本.

  3. SQL DELETE 语句

    DELETE 语句用于删除表中的行. 语法 DELETE FROM 表名称 WHERE 列名称 = 值 Person: LastName FirstName Address City Gates Bi ...

  4. git review出现的问题

    在提交代码review的时候可能会出现 Could not connect to gerrit.Enter your gerrit username: xxxxTrying again with ss ...

  5. 如果让你来做HashMap扩容,如何实现在不影响读写的情况下扩容?

    我觉得逼格高,不是体现在问题多刁钻,知识点多深,而是一个非常明确,无歧义的问题,能考察出面试者多方面的能力.这个问题背后:1.了解java中,HashMap的实现:如果一个面试者了解这一点,说明至少他 ...

  6. 利用jQuery对插件进行扩展时,方法$.extend()、$.fn.extend()区别与联系

      利用JQ开发插件的方法: 1.jQuery.extend(); 2.jQuery.fn.extend(); 3.通过$.widget()应用jQuery UI的部件工厂方式创建. 由于第三种方式通 ...

  7. bash shell + python简单教程,让你的mac/linux终端灰起来~

    前提条件:已经安装python,命令行支持bash 在bash_profile中添加 function ccolor { python /Users/xirtam/Documents/tools/cc ...

  8. CSS之伪类

    1. :link                     向未被访问的链接添加样式 :visited                向已被访问的链接添加样式 :hover               ...

  9. OC中的那些String

    /--------操作字符串--NSString(静态字符串)--------------------- NSString * a = @"a+b+c+a+b+d"; NSArra ...

  10. php try catch throw 用法

    1.try catch 捕捉不到fatal error致命错误 2.只有抛出异常才能被截获,如果异常抛出了却没有被捕捉到,就会产生一个fatal error. 3.父类可以捕获抛出的子类异常,Exce ...