#!/usr/bin/python
# -*- coding: UTF-8 -*-

import time
from datetime import datetime, timedelta
import zmq
import json
import random


REQUEST_TIMEOUT = 15000
REQUEST_RETRIES = 10
SERVER_ENDPOINT = "tcp://localhost:4444"


context = zmq.Context()

#print("Connecting to server…")
socket = context.socket(zmq.REQ)
socket.connect (SERVER_ENDPOINT)

print('Starting ZMQ client...')
poll = zmq.Poller()
poll.register(socket, zmq.POLLIN)

sequence = 0
retries_left = REQUEST_RETRIES

#dt=datetime(2018,5,15) #en vez de poner now()
dt=datetime.now()
while retries_left:
    sequence += 1
    request = str(sequence).encode()             
    print("HF_JRO: Sending (%s)" % request)

    #==== datos noise =========
    n1 = random.uniform(20.0,20.2)
    n2 = random.uniform(21.0,21.3)
    n3 = random.uniform(22.0,22.2)
    n4 = random.uniform(23.0,23.2)
    n5 = random.uniform(24.0,24.2)
    n6 = random.uniform(25.0,25.3)
    n7 = random.uniform(26.0,26.2)
    n8 = random.uniform(27.0,27.2)
    #=== fin de datos noise ===
    
    #==== datos rti ===========
    yrange = list(range(0,200,2))
    elementos=[]
    while len(elementos)<=100:
            elementos.append(random.randint(15, 35))
    #=== fin de datos rti =====


    #==== datos spc ===========
    x_range = list(range(80))
    matrix=[]
    while len(matrix)<=80:
            matrix.append(elementos)
    #=== fin de datos spc =====
    
    dt1=dt+timedelta(seconds=30)           #ahora voy a cambiar cada 30min ya no cada 30 segundos
    #dt1 = datetime.now()

    dato1 = {"time":time.mktime(dt1.timetuple()), 
            "yrange": yrange,
            "xrange": x_range,
            "localtime": True,
            "interval": 30,
            "exp_code": 101,
            "data": {"noise":[n1, n2, n3, n4, n5, n6, n7, n8],
                     "rti":[elementos,elementos,elementos,elementos,elementos,elementos,elementos,elementos],
                     "spc":[matrix,matrix,matrix,matrix,matrix,matrix,matrix,matrix]
                     }
            }
    
    #print("Sending..")
    dt = dt1

    #=== para simular huecos ===
    #if dt.hour in (3 ,4):
    #    continue
    socket.send_json(dato1)
    expect_reply = True
    while expect_reply:
        socks = dict(poll.poll(REQUEST_TIMEOUT))
        if socks.get(socket) == zmq.POLLIN:
            reply = socket.recv_string()
            if not reply:
                break
            if reply == "recibido":
                print("I: Server replied OK (%s)" % reply)
                retries_left = REQUEST_RETRIES
                expect_reply = False
            else:
                print("E: Malformed reply from server: %s" % reply)

        else:
            print("W: No response from server, retrying…")
            # Socket is confused. Close and remove it.
            socket.setsockopt(zmq.LINGER, 0)
            socket.close()
            poll.unregister(socket)
            retries_left -= 1
            if retries_left == 0:
                print("E: Server seems to be offline, abandoning")
                break
            print("I: Reconnecting and resending (%s)" % request)
            # Create new connection
            socket = context.socket(zmq.REQ)
            socket.connect(SERVER_ENDPOINT)
            poll.register(socket, zmq.POLLIN)
            #socket.send(request)
    #time.sleep(5)
    time.sleep(30)
context.term()





#===================