1
0
mirror of https://github.com/wbt5/real-url.git synced 2025-08-02 15:44:49 +08:00
2020-06-18 10:39:11 +08:00

119 lines
3.4 KiB
Python

# Tencent is pleased to support the open source community by making Tars available.
#
# Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
#
# Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# https://opensource.org/licenses/BSD-3-Clause
#
# Unless required by applicable law or agreed to in writing, software distributed
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
import struct
import string
from .__util import util
from .__tars import TarsOutputStream
from .__tars import TarsInputStream
from .__packet import RequestPacket
class TarsUniPacket(object):
def __init__(self):
self.__mapa = util.mapclass(util.string, util.bytes)
self.__mapv = util.mapclass(util.string, self.__mapa)
self.__buffer = self.__mapv()
self.__code = RequestPacket()
# @property
# def version(self):
# return self.__code.iVersion
# @version.setter
# def version(self, value):
# self.__code.iVersion = value
@property
def servant(self):
return self.__code.sServantName
@servant.setter
def servant(self, value):
self.__code.sServantName = value
@property
def func(self):
return self.__code.sFuncName
@func.setter
def func(self, value):
self.__code.sFuncName = value
@property
def requestid(self):
return self.__code.iRequestId
@requestid.setter
def requestid(self, value):
self.__code.iRequestId = value
@property
def result_code(self):
if ("STATUS_RESULT_CODE" in self.__code.status) == False:
return 0
return string.atoi(self.__code.status["STATUS_RESULT_CODE"])
@property
def result_desc(self):
if ("STATUS_RESULT_DESC" in self.__code.status) == False:
return ''
return self.__code.status["STATUS_RESULT_DESC"]
def put(self, vtype, name, value):
oos = TarsOutputStream()
oos.write(vtype, 0, value)
self.__buffer[name] = {vtype.__tars_class__: oos.getBuffer()}
def get(self, vtype, name):
if (name in self.__buffer) == False:
raise Exception("UniAttribute not found key:%s,type:%s" %
(name, vtype.__tars_class__))
t = self.__buffer[name]
if (vtype.__tars_class__ in t) == False:
raise Exception("UniAttribute not found type:" +
vtype.__tars_class__)
o = TarsInputStream(t[vtype.__tars_class__])
return o.read(vtype, 0, True)
def encode(self):
oos = TarsOutputStream()
oos.write(self.__mapv, 0, self.__buffer)
self.__code.iVersion = 2
self.__code.sBuffer = oos.getBuffer()
sos = TarsOutputStream()
RequestPacket.writeTo(sos, self.__code)
return struct.pack('!i', 4 + len(sos.getBuffer())) + sos.getBuffer()
def decode(self, buf):
ois = TarsInputStream(buf[4:])
self.__code = RequestPacket.readFrom(ois)
sis = TarsInputStream(self.__code.sBuffer)
self.__buffer = sis.read(self.__mapv, 0, True)
def clear(self):
self.__code.__init__()
def haskey(self, name):
return name in self.__buffer