def send_data(cls, net_info, data, send_para={}): """ 向指定的网络连接发送数据 @param {object} net_info - 要写入数据的网络信息对象(例如socket对象) @param {object} data - 要写入的数据对象(具体类型和定义,由实现类自定义) @param {dict} send_para - 写入数据的参数: overtime {int} - 发送超时时间,单位为毫秒, 非必须参数 @returns {CResult} - 发送结果: result.code :'00000'-成功,'20404'-写入数据超时,其他为写入失败 result.send_time : datetime 实际发送完成时间 result.overtime : int 超时时间(毫秒),当返回结果为超时,可获取超时时间信息 """ # 子类必须定义该功能 if type(send_para) != dict: send_para = {} _result = CResult('00000') _result.send_time = None _overtime = 10000 if 'overtime' in send_para.keys(): _overtime = send_para['overtime'] elif hasattr(net_info, 'send_timeout'): # 如果net_info有超时的设置 _overtime = net_info.send_timeout _result.overtime = _overtime _begin_time = datetime.datetime.now() with ExceptionTool.ignored_cresult( _result ): _rest_bytes = len(data) _total_bytes = _rest_bytes while _rest_bytes > 0: # 检查是否超时 if (datetime.datetime.now() - _begin_time).total_seconds() * 1000 > _overtime: # 已超时 _result.change_code(code='20404') break with ExceptionTool.ignored(expect=(BlockingIOError)): # 发送数据 _len = net_info.csocket.send(data[_total_bytes - _rest_bytes:]) if _len > 0: _rest_bytes = _rest_bytes - _len _result.send_time = datetime.datetime.now() return _result
def send_data(cls, net_info, data, send_para={}): """ 向指定的网络连接发送数据 @param {object} net_info - 要写入数据的网络信息对象(例如socket对象) @param {tuple} data - 要写入的数据对象,(proto_msg, msg) proto_msg : MsgHTTP报文头 msg : 二进制数据 @param {dict} send_para - 写入数据的参数 @returns {CResult} - 发送结果: result.code :'00000'-成功,'20404'-写入数据超时,其他为写入失败 result.send_time : datetime 实际发送完成时间 """ # 子类必须定义该功能 if type(send_para) != dict: send_para = {} _result = CResult('00000') _result.send_time = None with ExceptionTool.ignored_cresult( _result ): # 先要更新报文头的长度 _len = 0 if data[1] is not None: _len = len(data[1]) data[0].set_value('Content-Length', str(_len)) _send_result = TcpIpService.send_data(net_info, data[0].to_bytes(), send_para) if not _send_result.is_success(): return _send_result if _len > 0: _send_result = TcpIpService.send_data(net_info, data[1], send_para) _result = _send_result return _result