#!/usr/bin/python

import connect
import moduleIO
import monitorIO
import time
from multiprocessing import Process, Manager
#from redis.sentinel import Sentinel
import dataReduction
import os
import glob
import getCommand
import heartBeat

if __name__ == '__main__':
    # ======Try to connect NEON server
    #sentinel=Sentinel([('10.1.53.240', 9001),('10.1.53.240', 9011),('10.1.53.240', 9021)], socket_timeout=0.1)
    #r=sentinel.master_for('neonmaster', socket_timeout=20, password='sanlie;123')
    #ip_port = [('10.1.33.141', 9001), ('10.1.33.145',9001)]
    ip_port = [('10.1.53.240', 9001), ('10.1.53.240',9001)]
    passwd = 'sanlie;123'
    r = connect.connectNeon(ip_port, passwd, 10)
    r_write = r.getRedisWrite()
    r_read = r.getRedisRead()

    for file in glob.glob('./*.nxs'):
        os.remove(file)
    print "clear all nxs file"
    #moduleList=['module131']
    moduleList=['module131', 'module132', 'module133', 'module231', 'module232', 'module233', 'module322', 'module331', 'module332', 'module333', 'module341', 'module342', 'module343', 'module422', 'module431', 'module432', 'module433', 'module441', 'module442', 'module443', 'module521', 'module522', 'module523', 'module531', 'module532', 'module533', 'module541', 'module542', 'module543', 'module621', 'module622', 'module623', 'module631', 'module632', 'module633', 'module641', 'module642', 'module643']
    #moduleList=['module131', 'module132', 'module133']
    monitorList=['monitor1','monitor2','monitor3']

    #set command
    manager = Manager()
    myDict=manager.dict()
    myDict['configure'] = False
    myDict['running']= False
    myDict['error']=False
    print 'waiting . . .'
    init=1
    r_write.set("/GPPD/stateMachine/status",init)

    # create and start command thread and heartbeat thread
    myCommandThread=getCommand.getCommand(r_write, r_read, 0.1,myDict)
    myCommandThread.start()
    #print myCommandThread, " start!"
    # heartbeat process
    myHeartbeatThread=heartBeat.neonHeartBeat(r_write, r_read, 0.5)
    myHeartbeatThread.start()
    #print myHeartbeatThread," start!"

    myPro=[]
    for name in moduleList:
        myPro.append(moduleIO.moduleIO(r_write,r_read, 1, name, myDict))
    myPro.append(monitorIO.monitorIO(r_write, r_read, 1,monitorList, myDict))
    myPro.append(dataReduction.reduction(r_write,r_read, 30, myDict))
    for t in myPro:
        t.start()
        print t," start!"
