import zmq
import json
import random


def jacobi_iteration(u):
    for i in range(1, len(u) - 1):
        u[i] = 0.5 * (u[i - 1] + u[i + 1])


context = zmq.Context()

socket = context.socket(zmq.REQ)
# connect to localhost
socket.connect("tcp://127.0.0.1:5555")

print("Requesting parameters…")
socket.send(b"jacobi_request")
message = socket.recv().decode("ascii")
params = json.loads(message)

# initialize domain
u = [random.random() for i in range(params["n_unknowns"])]
u[0] = 0.0
u[len(u) - 1] = 0.0
socket.send("-".join(str(x) for x in u).encode("ascii"))

while True:
    # if requested, perform jacobi iteration and send result
    message = socket.recv().decode("ascii")
    if message != "next":
        break
    jacobi_iteration(u)
    socket.send("-".join(str(x) for x in u).encode("ascii"))