Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed
# encoding: ascii-8bit## Licensed to the Apache Software Foundation (ASF) under one# or more contributor license agreements. See the NOTICE file# distributed with this work for additional information# regarding copyright ownership. The ASF licenses this file# to you under the Apache License, Version 2.0 (the# "License"); you may not use this file except in compliance# with the License. You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## 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.#module Thriftclass FramedTransport < BaseTransportdef initialize(transport, read=true, write=true)@transport = transport@rbuf = ''@wbuf = ''@read = read@write = write@index = 0enddef open?@transport.open?enddef open@transport.openenddef close@transport.closeenddef read(sz)return @transport.read(sz) unless @readreturn '' if sz <= 0read_frame if @index >= @rbuf.length@index += sz@rbuf.slice(@index - sz, sz) || ''enddef write(buf,sz=nil)return @transport.write(buf) unless @write@wbuf << (sz ? buf[0...sz] : buf)end## Writes the output buffer to the stream in the format of a 4-byte length# followed by the actual data.#def flushreturn @transport.flush unless @writeout = [@wbuf.length].pack('N')out << @wbuf@transport.write(out)@transport.flush@wbuf = ''endprivatedef read_framesz = @transport.read_all(4).unpack('N').first@index = 0@rbuf = @transport.read_all(sz)endendclass FramedTransportFactory < BaseTransportFactorydef get_transport(transport)return FramedTransport.new(transport)endendend