mirror of
https://github.com/wbt5/real-url.git
synced 2025-08-02 15:44:49 +08:00
119 lines
3.4 KiB
Python
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
|