-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClient.py
143 lines (117 loc) · 6.07 KB
/
Client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
from enlace import *
import time
import numpy as np
class Client:
def __init__(self, img_location, TX, RX, baudrate):
self.location_r = img_location
self.comTX = TX
self.comRX = RX
self.txBuffer_H = 0
self.txBuffer = 0
self.txBuffer_len = 0
self.rxBuffer_H = 0
self.rxBuffer_D = 0
self.start_time = 0
self.execution_time = 0
self.Baud_Rate = baudrate
def init_comm(self):
try:
print("-------------------------")
print("Client Started")
print("-------------------------")
# Declaramos um objeto do tipo enlace com o nome "com". Essa é a camada inferior à aplicação. Observe que um parametro
# para declarar esse objeto é o nome da porta.
self.CTX = enlace(self.comTX, self.Baud_Rate)
self.CRX = enlace(self.comRX, self.Baud_Rate)
# Ativa comunicacao. Inicia os threads e a comunicação serial
self.CTX.enable()
self.CRX.enable()
# Se chegamos até aqui, a comunicação foi aberta com sucesso. Faça um print para informar.
client_init_msg1 = "Client TX iniciado na porta: {}.".format(self.comTX)
client_init_msg2 = "Client RX iniciado na porta: {}.".format(self.comRX)
print(client_init_msg1)
print(client_init_msg2)
print("-------------------------")
# Começar o cronometro do tempo de execução do envio
client_init_msg3 = "Iniciando o timer de execução."
print(client_init_msg3)
print("-------------------------")
self.start_time = time.time()
return([client_init_msg1,client_init_msg2,client_init_msg3])
except Exception as erro:
print("ops! :-\\")
print(erro)
self.CTX.disable()
self.CRX.disable()
def header_send_response(self):
try:
# Carregando imagem a ser executada
image_name = self.location_r.split("\\")
self.txBuffer = open(self.location_r, "rb").read()
self.txBuffer_len = len(self.txBuffer)
client_comm_msg1 = "Imagem para transmissão: {} ({} bytes).".format(image_name[1], self.txBuffer_len)
print(client_comm_msg1)
print("-------------------------")
# Enviando para o Server o Header
client_comm_msg2 = "Enviando o para o Server o Head."
print(client_comm_msg2)
print("-------------------------")
self.txBuffer_H = (self.txBuffer_len).to_bytes(2, byteorder="big")
self.CTX.sendData(np.asarray(self.txBuffer_H))
# Recebendo uma resposta do Server sobre o Header
client_comm_msg3 = "Esperando a resposta do Server sobre o Head."
print(client_comm_msg3)
self.rxBuffer_H, nRx = self.CRX.getData(2)
print("-------------------------")
client_comm_msg4 = "Recebido do Server a resposta do Head."
print(client_comm_msg4)
print("-------------------------")
return([client_comm_msg1,client_comm_msg2,client_comm_msg3,client_comm_msg4])
except Exception as erro:
print("ops! :-\\")
print(erro)
self.CTX.disable()
self.CRX.disable()
def data_send_response(self):
try:
# Transmitir dados para Server
client_data_msg1 = "Enviando os dados para o Server."
print(client_data_msg1)
print("-------------------------")
self.CTX.sendData(np.asarray(self.txBuffer))
# Acesso aos bytes recebidos
client_data_msg2 = "Esperando a resposta de conclusão da conexão."
print(client_data_msg2)
print("-------------------------")
self.rxBuffer_D, nRx = self.CRX.getData(self.txBuffer_len)
client_data_msg3 = "Concluindo a conexão com o Server."
print(client_data_msg3)
print("-------------------------")
return([client_data_msg1,client_data_msg2,client_data_msg3])
except Exception as erro:
print("ops! :-\\")
print(erro)
self.CTX.disable()
self.CRX.disable()
def end_connection(self):
try:
# Encerra tempo de cronometro
print("Procedimento finalizado")
self.execution_time = time.time() - self.start_time
client_end_msg1 = "Tempo de execução: {:.2f} segundos.".format(self.execution_time)
print(client_end_msg1)
client_end_msg2 = "Velocidade de transmissão: {:.2f} Bytes/segundos.".format(self.txBuffer_len/self.execution_time)
print(client_end_msg2)
# Encerra comunicação
print("-------------------------")
client_end_msg3 = "Comunicação encerrada com as portas {} e {}.".format(self.comTX,self.comRX)
print(client_end_msg3)
print("-------------------------")
self.CTX.disable()
self.CRX.disable()
return([client_end_msg1,client_end_msg2,client_end_msg3])
except Exception as erro:
print("ops! :-\\")
print(erro)
self.CTX.disable()
self.CRX.disable()