public MultiThreadedSpatialOSConnectionHandler(Connection connection)
        {
            this.connection = connection;

            commandMetaDataManager = new CommandMetaDataManager();
            serializationHandler   = new ThreadedSerializationHandler(commandMetaDataManager);
            deserializationHandler = new ThreadedDeserializationHandler(commandMetaDataManager);
        }
        public ThreadedDeserializationHandler(CommandMetaDataManager commandMetaDataManager)
        {
            this.commandMetaDataManager = commandMetaDataManager;

            opsToDeserialize = new BlockingCollection <OpList>(new ConcurrentQueue <OpList>());
            converter        = new ConcurrentOpListConverter();

            deserializationThread = new Thread(DeserializeOps);
            deserializationThread.Start();
        }
        public ThreadedSerializationHandler(CommandMetaDataManager commandMetaDataManager)
        {
            this.commandMetaDataManager = commandMetaDataManager;

            messagesToSerialize          = new BlockingCollection <MessagesToSend>(new ConcurrentQueue <MessagesToSend>());
            serializedMessagesToSendPool = new ConcurrentPool <SerializedMessagesToSend>();
            messagesToSendPool           = new ConcurrentPool <MessagesToSend>();
            serializedMessages           = new ConcurrentQueue <SerializedMessagesToSend>();

            serialisationThread = new Thread(SerializeMessages);
            serialisationThread.Start();
        }