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 + ...
随机推荐
- Nginx多个域名,https redirect to http
背景描述:Nginx绑定多个域名,其中一个域名配置了https,如域名A:https://www.aaa.com:另外的域名B(http://www.bbb.com)没有配置SSL证书, 问题:以ht ...
- LoadRunner - 001
lr_eval_string():函数的主要作用:返回脚本中的一个参数当前的值,返回值类型:char一般多用在调试脚本时输出参数的值.具体用法如下:lr_output_message("Th ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- Android 使用js调用Java
效果如: 主要用到一个接口类:MyObject package com.example.jsdemo; import android.content.Context; import android.s ...
- 使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)
正常情况下使用md5加密 var crypto = require('crypto'); var md5Sign = function (data) { var md5 = crypto.create ...
- createjs学习二之flash转canvas学习1
设置发布 或者 导出参数设置 c_lib_main c_images_main/ 导出之后的文件 打开导出的html文件可以看到如下,,可以正常显示的,,只是stop了还不能动 给舞台上某一元素添加点 ...
- Json 学习
json 格式: 1) 并列的数据之间用逗号(", ")分隔. 2) 映射用冒号(": ")表示. 3) 并列数据的集合(数组)用方括号("[]&qu ...
- java机试要点
Java机试准备 一般结构: import java.util.Scanner; public class Main{ public static void main(String[] args) ...
- Open Close Principle 开闭合原则
- 【翻译】如何给tomcat配置memcached-session-manager
原文在这 ,其实不是忠实翻译,就是按照自己理解记录一下 第一步,下载所需的jar包 下载 memcached-session-manager-x.y.z.jar, memcached-session- ...