/// <summary> /// 向单个客户端发送数据 /// </summary> /// <param name="rsClient"></param> /// <param name="data"></param> public void SendData(RegistryClient registryClient, RegistryMessageAction action, String data) { try { RegistryMessage rm = new RegistryMessage() { Action = action, MessageBody = data }; String messageData = XmlUtil.SaveXmlFromObj <RegistryMessage>(rm); Console.WriteLine("发送数据:{0}", messageData); Byte[] msg = Encoding.UTF8.GetBytes(messageData); registryClient.Socket.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), registryClient); } catch (Exception ex) { XTrace.WriteLine("发送数据时发生异常:" + ex.ToString()); lock (m_RegistryClients) { m_RegistryClients.Remove(registryClient); registryClient.Dispose(); } } }
/// <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()); } }
private void ReceiveCallback(IAsyncResult ar) { RegistryClient registryClient = (RegistryClient)ar.AsyncState; try { int dataLength = registryClient.Socket.EndReceive(ar); if (dataLength == 0) { Console.WriteLine("接收客户端:{0}已经断开连接。", registryClient.Socket.RemoteEndPoint.ToString()); lock (m_RegistryClients){ m_RegistryClients.Remove(registryClient); registryClient.Dispose(); } } else { String data = Encoding.UTF8.GetString(registryClient.ReceiveBuffer, 0, dataLength); Console.WriteLine("接收客户端:{0}发送的数据:{1}。", registryClient.Socket.RemoteEndPoint.ToString(), data); //解析来自客户端的类型 RegistryMessage regMessage = XmlUtil.LoadObjFromXML <RegistryMessage>(data); registryClient.RegistryClientType = regMessage.ClientType; registryClient.ClearBuffer(); registryClient.Socket.BeginReceive(registryClient.ReceiveBuffer, 0, registryClient.ReceiveBuffer.Length , SocketFlags.None, new AsyncCallback(ReceiveCallback), registryClient); //--由消息处理器进行处理 m_MessageProcessor.Process(registryClient, regMessage); }; } catch (Exception ex) { XTrace.WriteLine("接收数据时发生异常:" + ex.ToString()); lock (m_RegistryClients) { m_RegistryClients.Remove(registryClient); registryClient.Dispose(); } } }