+++ /dev/null
-/*
- * 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.
- */
-
-package org.apache.thrift.server;
-
-import org.apache.thrift.*;
-import org.apache.thrift.protocol.*;
-import org.apache.thrift.transport.*;
-import org.apache.thrift.meta_data.*;
-
-// Simple single-threaded server for testing
-class TSimpleServer extends TServer {
-
- private var stop : Bool = false;
-
- //stops just after input transport returns EOF
- //useful for limited scenarios, like embeding into php server
- public var runOnce : Bool = false;
-
- public function new( processor : TProcessor,
- serverTransport : TServerTransport,
- transportFactory : TTransportFactory = null,
- protocolFactory : TProtocolFactory = null,
- logger : Dynamic->Void = null) {
- super( processor, serverTransport,
- transportFactory, transportFactory,
- protocolFactory, protocolFactory,
- logger);
- }
-
-
- public override function Serve() : Void
- {
- try
- {
- serverTransport.Listen();
- }
- catch (ttx : TTransportException)
- {
- logDelegate(ttx);
- return;
- }
-
- // Fire the preServe server event when server is up,
- // but before any client connections
- if (serverEventHandler != null) {
- serverEventHandler.preServe();
- }
-
- while( ! stop)
- {
- var client : TTransport = null;
- var inputTransport : TTransport = null;
- var outputTransport : TTransport = null;
- var inputProtocol : TProtocol = null;
- var outputProtocol : TProtocol = null;
- var connectionContext : Dynamic = null;
- try
- {
- client = serverTransport.Accept();
- if (client != null) {
- inputTransport = inputTransportFactory.getTransport( client);
- outputTransport = outputTransportFactory.getTransport( client);
- inputProtocol = inputProtocolFactory.getProtocol( inputTransport);
- outputProtocol = outputProtocolFactory.getProtocol( outputTransport);
-
- // Recover event handler (if any) and fire createContext
- // server event when a client connects
- if (serverEventHandler != null) {
- connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
- }
-
- // Process client requests until client disconnects
- while( true) {
- // Fire processContext server event
- // N.B. This is the pattern implemented in C++ and the event fires provisionally.
- // That is to say it may be many minutes between the event firing and the client request
- // actually arriving or the client may hang up without ever makeing a request.
- if (serverEventHandler != null) {
- serverEventHandler.processContext(connectionContext, inputTransport);
- }
-
- //Process client request (blocks until transport is readable)
- if( ! processor.process( inputProtocol, outputProtocol)) {
- break;
- }
- }
- }
- }
- catch( ttx : TTransportException)
- {
- // Usually a client disconnect, expected
- if(runOnce && ttx.errorID == TTransportException.END_OF_FILE) {
- //input returns eof, exit
- //follows lib/cpp/src/thrift/server/TServerFramework.cpp
- Stop();
- }
- }
- catch( pex : TProtocolException)
- {
- logDelegate('$pex ${pex.errorID} ${pex.errorMsg}'); // Unexpected
- }
- catch( e : Dynamic)
- {
- logDelegate(e); // Unexpected
- }
-
- if(client != null && !runOnce)
- {
- client.close();
- }
-
- // Fire deleteContext server event after client disconnects
- if (serverEventHandler != null) {
- serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
- }
- }
- }
-
- public override function Stop() : Void
- {
- stop = true;
- serverTransport.Close();
- }
-}