You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							3.0 KiB
						
					
					
				
								// Module:  LOG4CPLUS
							 | 
						|
								// File:    loggingserver.cxx
							 | 
						|
								// Created: 5/2003
							 | 
						|
								// Author:  Tad E. Smith
							 | 
						|
								//
							 | 
						|
								//
							 | 
						|
								// Copyright 2003-2013 Tad E. Smith
							 | 
						|
								//
							 | 
						|
								// Licensed 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.
							 | 
						|
								
							 | 
						|
								#include <cstdlib>
							 | 
						|
								#include <iostream>
							 | 
						|
								#include <log4cplus/configurator.h>
							 | 
						|
								#include <log4cplus/socketappender.h>
							 | 
						|
								#include <log4cplus/helpers/socket.h>
							 | 
						|
								#include <log4cplus/thread/threads.h>
							 | 
						|
								#include <log4cplus/spi/loggingevent.h>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								namespace loggingserver
							 | 
						|
								{
							 | 
						|
								
							 | 
						|
								class ClientThread : public log4cplus::thread::AbstractThread
							 | 
						|
								{
							 | 
						|
								public:
							 | 
						|
								    ClientThread(log4cplus::helpers::Socket clientsock)
							 | 
						|
								    : clientsock(clientsock) 
							 | 
						|
								    {
							 | 
						|
								        std::cout << "Received a client connection!!!!" << std::endl;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    ~ClientThread()
							 | 
						|
								    {
							 | 
						|
								        std::cout << "Client connection closed." << std::endl;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    virtual void run();
							 | 
						|
								
							 | 
						|
								private:
							 | 
						|
								    log4cplus::helpers::Socket clientsock;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								int
							 | 
						|
								main(int argc, char** argv)
							 | 
						|
								{
							 | 
						|
								    if(argc < 3) {
							 | 
						|
								        std::cout << "Usage: port config_file" << std::endl;
							 | 
						|
								        return 1;
							 | 
						|
								    }
							 | 
						|
								    int port = std::atoi(argv[1]);
							 | 
						|
								    const log4cplus::tstring configFile = LOG4CPLUS_C_STR_TO_TSTRING(argv[2]);
							 | 
						|
								
							 | 
						|
								    log4cplus::PropertyConfigurator config(configFile);
							 | 
						|
								    config.configure();
							 | 
						|
								
							 | 
						|
								    log4cplus::helpers::ServerSocket serverSocket(port);
							 | 
						|
								    if (!serverSocket.isOpen()) {
							 | 
						|
								        std::cout << "Could not open server socket, maybe port "
							 | 
						|
								            << port << " is already in use." << std::endl;
							 | 
						|
								        return 2;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    while(1) {
							 | 
						|
								        loggingserver::ClientThread *thr = 
							 | 
						|
								            new loggingserver::ClientThread(serverSocket.accept());
							 | 
						|
								        thr->start();
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return 0;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								////////////////////////////////////////////////////////////////////////////////
							 | 
						|
								// loggingserver::ClientThread implementation
							 | 
						|
								////////////////////////////////////////////////////////////////////////////////
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								void
							 | 
						|
								loggingserver::ClientThread::run()
							 | 
						|
								{
							 | 
						|
								    while(1) {
							 | 
						|
								        if(!clientsock.isOpen()) {
							 | 
						|
								            return;
							 | 
						|
								        }
							 | 
						|
								        log4cplus::helpers::SocketBuffer msgSizeBuffer(sizeof(unsigned int));
							 | 
						|
								        if(!clientsock.read(msgSizeBuffer)) {
							 | 
						|
								            return;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        unsigned int msgSize = msgSizeBuffer.readInt();
							 | 
						|
								
							 | 
						|
								        log4cplus::helpers::SocketBuffer buffer(msgSize);
							 | 
						|
								        if(!clientsock.read(buffer)) {
							 | 
						|
								            return;
							 | 
						|
								        }
							 | 
						|
								        
							 | 
						|
								        log4cplus::spi::InternalLoggingEvent event
							 | 
						|
								            = log4cplus::helpers::readFromBuffer(buffer);
							 | 
						|
								        log4cplus::Logger logger
							 | 
						|
								            = log4cplus::Logger::getInstance(event.getLoggerName());
							 | 
						|
								        logger.callAppenders(event);   
							 | 
						|
								    }
							 | 
						|
								}
							 |