/// <summary> /// 接收注册中心的消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void m_CometClient_OnReceiveNotify(object sender, CometEventArgs e) { try { if (e.Type == CometEventType.ReceiveMessage) // 接收到来自服务器的配置信息 { RegistryMessage rm = XmlUtil.LoadObjFromXML <RegistryMessage>(e.Response); if (rm.Action == RegistryMessageAction.ServiceConfig) { m_ESBProxy.ESBConfig = XmlUtil.LoadObjFromXML <ESBConfig>(rm.MessageBody); ThreadPoolX.QueueUserWorkItem(x => { m_ConfigurationManager.SaveESBConfig(m_ESBProxy.ESBConfig); }); } } else if (e.Type == CometEventType.Connected) // 当和服务器取得联系时发送消费者配置文件到服务端 { m_CometClient.SendData(RegistryMessageAction.Hello, m_ESBProxy.ConsumerConfig.ToXml()); } } catch (Exception ex) { XTrace.WriteLine("接收注册中心消息时发生错误:" + ex.ToString()); } }
/// <summary> /// 增对不同的客户端和消息类型进行处理 /// </summary> /// <param name="regClient"></param> /// <param name="regMessage"></param> public void Process(RegistryClient regClient, RegistryMessage regMessage) { if (regMessage.ClientType == RegistryClientType.Consumer && regMessage.Action == RegistryMessageAction.Hello) { ConsumerConfig consumerConfig = XmlUtil.LoadObjFromXML<ConsumerConfig>(regMessage.MessageBody); ESBConfig esbConfig = GetESBConfig(consumerConfig); m_RegistryCenter.SendData(regClient, RegistryMessageAction.ServiceConfig, esbConfig.ToXml()); } }
/// <summary> /// 向服务器发送数据 /// </summary> /// <param name="message"></param> public void SendData(RegistryMessageAction action, String message) { try { RegistryMessage regMessage = new RegistryMessage() { Action = action, ClientType = m_ClientType, MessageBody = message }; String dataMessage = XmlUtil.SaveXmlFromObj <RegistryMessage>(regMessage); Console.WriteLine("发送数据:{0}", dataMessage); Byte[] data = Encoding.UTF8.GetBytes(dataMessage); m_SocketClient.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), m_SocketClient); } catch (Exception ex) { OnLostConnection(ex.ToString()); } }