Advertisement
Guest User

Untitled

a guest
Oct 26th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.85 KB | None | 0 0
  1. # EXERCÍCIO DE REDES
  2.  
  3. # ANA CLÁUDIA GOMES
  4. # SAULO ANTUNES SILVA
  5.  
  6. ##############################################
  7.  
  8. import gps
  9.  
  10. class Position:
  11.     """
  12.    Posição
  13.        Define a posição do veículo
  14.    """
  15.     float x
  16.     float y
  17.     int via
  18.  
  19.     update():
  20.         x = gps.getX()
  21.         y = gps.getY()
  22.  
  23.         """
  24.        De acordo com a posição do veículo
  25.        é identificado a via que o veículo se encontra
  26.        """
  27.         via = map(x, y)
  28.  
  29.  
  30. class Vehicle:
  31.     """
  32.    Veículo
  33.        Define as caracteríscas dos veículos
  34.    """
  35.     Position position
  36.     float velocity
  37.     bool priority
  38.  
  39.     def speedup()
  40.         velocity++
  41.  
  42.     def slowdown()
  43.         velocity--
  44.  
  45.  
  46. class Move:
  47.     """
  48.    Movimento
  49.        Define a intenção de movimento de um veículo
  50.        Se o movimento já foi realizado completed = True
  51.    """
  52.     Position origin
  53.     Position destination
  54.     bool completed
  55.  
  56.  
  57. class Action:
  58.     """
  59.    Ação
  60.        Compões as informações necessárias para controle
  61.        de trafégo do cruzamento
  62.    """
  63.     Vehicle vechicle
  64.     Move move
  65.     Datetime startTime = now()
  66.     bool allowed = False
  67.  
  68.  
  69. def main():
  70.     vehicle = Vehicle()             # Dado um veículo qualquer
  71.     move = Move(){                  # E sua intenção de movimento, ou seja,
  72.         origin = vehicle.position,  # onde o veículo está
  73.         destination = otherPosition # e onde deseja chegar
  74.     }
  75.  
  76.     myaction = Action(){            # As caracteristicas do veículo
  77.         vehicle = vehicle,          # e sua intenção de movimento
  78.         move = move                 # são colocadas em uma Ação
  79.     }
  80.  
  81.     actions = [myaction]            # Inicia a lista de ações, apenas com a ação
  82.                                     # do veículo atual
  83.  
  84.     while myaction in actions:      # Enquanto a ação do veículo estiver na fila de ações:
  85.         actions = receive()         # Aguarda o recebimento de uma nova fila de ações
  86.                                     # que pode ser enviada por outros veículos
  87.  
  88.         def receive():
  89.             socket = TCPSocket()         # Abre um socket de comunicação
  90.             socket.listen(duration=1):   # Aguarda o recebimento de alguma mensagem
  91.             actions = socket.read()      # por 1 segundo, caso nada seja recebido
  92.             return actions               # retorna null
  93.  
  94.  
  95.         if not actions:             # Se nenhuma ação é recebida, ou seja, não há nenhum
  96.             actions = [myaction]    # outro veículo por perto, a lista é composta apenas
  97.                                     # pela ação do veículo atual
  98.  
  99.         if myaction not in actions: # Caso seja recebido uma lista de ações, porém a ação do veículo
  100.             actions.add(myaction)   # atual não esteja nela, a ação do veículo atual deve ser adicionada
  101.                                     # Ex: Quando um novo veículo está se aproximando do cruzamento
  102.        
  103.         process(actions)            # A lista então deve ser processado e ataulizada de acordo com os
  104.                                     # critérios de preferência
  105.  
  106.         def process(actions):
  107.             for action in actions:              # Remove da lista ações que já foram concluídas, ou seja,
  108.                 if action.move.completed:       # veículos que já passaram o cruzamento
  109.                     actions.remove(action)
  110.  
  111.             sort(actions, by=startTime)         # ordena a lista por ordem de chegada
  112.  
  113.             if actions(x => x.vehicle.priority == True).any():                      # verifica se existem algum veículo de prioridade
  114.                 priorityVehicle = actions.first(x => x.vehicle.priority == True)    # busca o primeiro veículo de prioridade
  115.                 for action in actions.filter(x => x.vehicle.position.via == priorityVehicle.position.via)    # filtra os veículos que estão na mesma via
  116.                     if action not collide with actions:                                             # do veículo de emergência
  117.                         acion.allowed = True                                                        # e atribui permissão se não há colisão
  118.                                                                                                     # afim de liberar o trânsito da via
  119.                                                                                                     # do veículo de emergência
  120.             for action in actions:                      # Para cada ação        
  121.                 if action not collide with actions:     # se ela não colide com nenhuma outra
  122.                     acion.allowed = True                # ela é permitida
  123.  
  124.  
  125.         updateVehicle(myaction)      # O veículo então verifica o status da sua ação na lista, e atualiza
  126.                                      # sua velocidade e direção
  127.  
  128.         def updateVehicle(myaction)
  129.             if myaction.allowed == True:            # se o movimento do veículo é permitido
  130.                 myaction.vehicle.speedup()          # o veículo segue adiante
  131.             else:
  132.                 myaction.vehicle.slowdown()         # caso contrário, ele diminui a velocidade
  133.                
  134.             myaction.vehicle.position.update()                                  # o veículo atualiza sua posicao
  135.             if myaction.vehicle.position == myaction.vehicle.move.destination:  # e então verifica se o movimento
  136.                 myaction.move.completed = True                                  # está completado
  137.  
  138.  
  139.         broadcast(actions)          # O veículo então faz o broadcast com a nova lista
  140.  
  141.         def broadcast(actions)                          # Envia a lista de actions para um endereço
  142.             socket = TCPSocket(broadcast_address)       # de broadcast pre-definido
  143.             socket.send(data=actions)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement