Похоже Вы не до конца ознакомились с практикой асинхронного программирования и фреймворком Twisted в частности.
Объект Вашего класса Server должен содержать внутри себя состояние, исходя из которого будет выбираться логика обработки пакетов.
Немного теории по теме:
Автоматное программирование.
Вкратце - суть в том, чтобы хранить некую переменную состояния. Например вот так:
STATE_INITIAL = 1
STATE_AUTHORIZED = 2
class Server(Protocol):
state = STATE_INITIAL
def handleAuth(self, data):
hdataA = hack(data)
# Не забываем тут про обработку ошибок,
# если пришел неправильный пакет
print('In: ' + hdataA)
print('devID: ' + str(reverse_hex(hdataA[62:68])))
dataA = b'7e7e0e00020001ab020000000001000000000000000000000000000000' # наш ответ
self.transport.write(dataA)
# Считаем что авторизация прошла успешно
self.state = STATE_AUTHORIZED
def handleInfo(self, data):
# Вот тут бы хотелось работать с подключением и принимать навигационные данные
pass
def dataReceived(self, data):
'''
Обрабатываем пакет в зависимости от текущего состояния соединения
'''
if self.state is STATE_INITIAL:
self.handleAuth(data)
elif self.state is STATE_AUTHORIZED:
self.handleInfo(data)
else:
print('Invalid packet')
Работает в целом это так (условно говоря): Twisted вешает фабрику
ServerFactory на указанный порт (у Вас это 3095). При создании нового соединения (подключения к серверу), вышеуказанная фабрика создает экземпляр класса
Server.
То есть грубо говоря на каждое активное сетевое соединение в Вашей программе существует отдельный экземпляр класса
Server, который и обрабатывает это соединение.
Метод
dataReceived вызывается каждый раз, когда приходят какие-то данные в сокет.
При закрытии соединения, экземпляр класса
Server уничтожается автоматически (иначе будет утечка памяти).