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)
{
}
}
}