Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # EXERCÍCIO DE REDES
- # ANA CLÁUDIA GOMES
- # SAULO ANTUNES SILVA
- ##############################################
- import gps
- class Position:
- """
- Posição
- Define a posição do veículo
- """
- float x
- float y
- int via
- update():
- x = gps.getX()
- y = gps.getY()
- """
- De acordo com a posição do veículo
- é identificado a via que o veículo se encontra
- """
- via = map(x, y)
- class Vehicle:
- """
- Veículo
- Define as caracteríscas dos veículos
- """
- Position position
- float velocity
- bool priority
- def speedup()
- velocity++
- def slowdown()
- velocity--
- class Move:
- """
- Movimento
- Define a intenção de movimento de um veículo
- Se o movimento já foi realizado completed = True
- """
- Position origin
- Position destination
- bool completed
- class Action:
- """
- Ação
- Compões as informações necessárias para controle
- de trafégo do cruzamento
- """
- Vehicle vechicle
- Move move
- Datetime startTime = now()
- bool allowed = False
- def main():
- vehicle = Vehicle() # Dado um veículo qualquer
- move = Move(){ # E sua intenção de movimento, ou seja,
- origin = vehicle.position, # onde o veículo está
- destination = otherPosition # e onde deseja chegar
- }
- myaction = Action(){ # As caracteristicas do veículo
- vehicle = vehicle, # e sua intenção de movimento
- move = move # são colocadas em uma Ação
- }
- actions = [myaction] # Inicia a lista de ações, apenas com a ação
- # do veículo atual
- while myaction in actions: # Enquanto a ação do veículo estiver na fila de ações:
- actions = receive() # Aguarda o recebimento de uma nova fila de ações
- # que pode ser enviada por outros veículos
- def receive():
- socket = TCPSocket() # Abre um socket de comunicação
- socket.listen(duration=1): # Aguarda o recebimento de alguma mensagem
- actions = socket.read() # por 1 segundo, caso nada seja recebido
- return actions # retorna null
- if not actions: # Se nenhuma ação é recebida, ou seja, não há nenhum
- actions = [myaction] # outro veículo por perto, a lista é composta apenas
- # pela ação do veículo atual
- if myaction not in actions: # Caso seja recebido uma lista de ações, porém a ação do veículo
- actions.add(myaction) # atual não esteja nela, a ação do veículo atual deve ser adicionada
- # Ex: Quando um novo veículo está se aproximando do cruzamento
- process(actions) # A lista então deve ser processado e ataulizada de acordo com os
- # critérios de preferência
- def process(actions):
- for action in actions: # Remove da lista ações que já foram concluídas, ou seja,
- if action.move.completed: # veículos que já passaram o cruzamento
- actions.remove(action)
- sort(actions, by=startTime) # ordena a lista por ordem de chegada
- if actions(x => x.vehicle.priority == True).any(): # verifica se existem algum veículo de prioridade
- priorityVehicle = actions.first(x => x.vehicle.priority == True) # busca o primeiro veículo de prioridade
- for action in actions.filter(x => x.vehicle.position.via == priorityVehicle.position.via) # filtra os veículos que estão na mesma via
- if action not collide with actions: # do veículo de emergência
- acion.allowed = True # e atribui permissão se não há colisão
- # afim de liberar o trânsito da via
- # do veículo de emergência
- for action in actions: # Para cada ação
- if action not collide with actions: # se ela não colide com nenhuma outra
- acion.allowed = True # ela é permitida
- updateVehicle(myaction) # O veículo então verifica o status da sua ação na lista, e atualiza
- # sua velocidade e direção
- def updateVehicle(myaction)
- if myaction.allowed == True: # se o movimento do veículo é permitido
- myaction.vehicle.speedup() # o veículo segue adiante
- else:
- myaction.vehicle.slowdown() # caso contrário, ele diminui a velocidade
- myaction.vehicle.position.update() # o veículo atualiza sua posicao
- if myaction.vehicle.position == myaction.vehicle.move.destination: # e então verifica se o movimento
- myaction.move.completed = True # está completado
- broadcast(actions) # O veículo então faz o broadcast com a nova lista
- def broadcast(actions) # Envia a lista de actions para um endereço
- socket = TCPSocket(broadcast_address) # de broadcast pre-definido
- socket.send(data=actions)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement