/// <summary> /// 数据转网络结构 /// </summary> /// <param name="_protocalType"></param> /// <param name="_data"></param> /// <returns></returns> private sSocketData BytesToSocketData(eProtocalCommand _protocalType, byte[] _data) { sSocketData tmpSocketData = new sSocketData(); tmpSocketData._buffLength = Constants.HEAD_LEN + _data.Length; tmpSocketData._dataLength = _data.Length; tmpSocketData._protocallType = _protocalType; tmpSocketData._data = _data; return(tmpSocketData); }
/// <summary> /// 发送消息基本方法 /// </summary> /// <param name="_protocalType"></param> /// <param name="_data"></param> private void SendMsgBase(eProtocalCommand _protocalType, byte[] _data) { if (clientSocket == null || !clientSocket.Connected) { _ReConnect(); return; } byte[] _msgdata = DataToBytes(_protocalType, _data); clientSocket.BeginSend(_msgdata, 0, _msgdata.Length, SocketFlags.None, new AsyncCallback(_onSendMsg), clientSocket); }
//删除网络事件观察者 public void removeObserver(eProtocalCommand _protocalType, Callback_NetMessage_Handle _callback) { if (_netMessage_EventList.ContainsKey(_protocalType)) { _netMessage_EventList[_protocalType] -= _callback; if (_netMessage_EventList[_protocalType] == null) { _netMessage_EventList.Remove(_protocalType); } } }
//添加网络事件观察者 public void addObsever(eProtocalCommand _protocalType, Callback_NetMessage_Handle _callback) { if (_netMessage_EventList.ContainsKey(_protocalType)) { _netMessage_EventList[_protocalType] += _callback; } else { _netMessage_EventList.Add(_protocalType, _callback); } }
/// <summary> /// 以二进制方式发送 /// </summary> /// <param name="_protocalType"></param> /// <param name="_byteStreamBuff"></param> public void SendMsg(eProtocalCommand _protocalType, ByteStreamBuff _byteStreamBuff) { SendMsgBase(_protocalType, _byteStreamBuff.ToArray()); }
/// <summary> /// 合并协议,数据 /// </summary> /// <param name="_protocalType"></param> /// <param name="_data"></param> /// <returns></returns> private byte[] DataToBytes(eProtocalCommand _protocalType, byte[] _data) { return(SocketDataToBytes(BytesToSocketData(_protocalType, _data))); }
/// <summary> /// 以ProtoBuf方式发送 /// </summary> /// <param name="_protocalType"></param> /// <param name="data"></param> public void SendMsg(eProtocalCommand _protocalType, ProtoBuf.IExtensible data) { SendMsgBase(_protocalType, ProtoBuf_Serializer(data)); }