Imports System.IO Imports EgwMultiEngineManager.ExecProcessManager Imports Newtonsoft.Json Imports Pipelines.Sockets.Unofficial.SocketConnection Imports StackExchange.Redis Module MainModule Private m_bDebug As Boolean = False Private m_ExecProcessManager As ExecProcessManager Private m_stopWatch As New Stopwatch() ' Riferimento al gestore del server Redis Private m_RedisManager As RedisManager Friend ReadOnly Property RedisManager As RedisManager Get Return m_RedisManager End Get End Property Private InputChn As New RedisChannel("EgwEngineInput", RedisChannel.PatternMode.Auto) Private OutputChn As New RedisChannel("EgwEngineOutput", RedisChannel.PatternMode.Auto) Sub Main() If IsNothing(m_ExecProcessManager) Then Dim sCamExePath As String = "c:\EgtProg\EgtEngine\EgtEngineR32.exe" Dim sMainLuaPath As String = "c:\Temp\EgwMultiEngineManager\Pipe.lua" m_ExecProcessManager = New ExecProcessManager(sCamExePath, sMainLuaPath, 1, ReturnModes.EVENT_) m_ExecProcessManager.StartExecutionThread() AddHandler m_ExecProcessManager.m_AnswerReceived, AddressOf ExecProcessManager_AnswerReceived End If Dim sConnection As String = "redis.ufficio:26379, serviceName=devel, DefaultDatabase=6, keepAlive=180, connectTimeout=15000, syncTimeout=15000, asyncTimeout=15000, abortConnect=false, ssl=false, allowAdmin=true" m_RedisManager = New RedisManager(sConnection, 1) m_RedisManager.SubscribeChannel("EgwEngineInput", AddressOf EgwEngineInputHandler) 'Dim sRettad As String = System.Console.ReadLine() ' funzionamento simulato If m_bDebug Then m_RedisManager.SubscribeChannel("EgwEngineOutput", AddressOf EgwEngineOutputHandler) Dim sRead As String = System.Console.ReadLine() While Not String.IsNullOrWhiteSpace(sRead) ' passo dati per esecuzione Dim Args As New Dictionary(Of String, String) Dim ReadFile As String = File.ReadAllText("c:\Temp\EgwMultiEngineManager\AntaSingola.jwd") Args.Add("Mode", "1") Args.Add("Jwd", ReadFile) Dim InputValue As New RedisValue(New ProcessArgs(1, Args).sProcessArgs) m_RedisManager.Subscriber.Publish(InputChn, InputValue) sRead = System.Console.ReadLine() End While End If End Sub Private Sub ExecProcessManager_AnswerReceived(Answer As ProcessArgsResult) m_RedisManager.Subscriber.Publish(OutputChn, JsonConvert.SerializeObject(Answer)) m_stopWatch.Stop() ' Get the elapsed time as a TimeSpan value. Dim ts As TimeSpan = m_stopWatch.Elapsed ' Format and display the TimeSpan value. Dim elapsedTime As String = String.Format("{0:N3}", ts.TotalMilliseconds) System.Console.WriteLine("Risposto in " + elapsedTime) End Sub Private Sub EgwEngineInputHandler(RedisChannel As RedisChannel, RedisValue As RedisValue) 'System.Console.WriteLine("Ricevuto valore " & RedisValue.ToString() & " dal canale " & RedisChannel.ToString()) System.Console.WriteLine("Ricevuto valore dal canale " & RedisChannel.ToString()) m_stopWatch.Restart() Dim Request As ProcessArgs = JsonConvert.DeserializeObject(Of ProcessArgs)(RedisValue) m_ExecProcessManager.ArgumentsEnqueue(Request) End Sub Private Sub EgwEngineOutputHandler(RedisChannel As RedisChannel, RedisValue As RedisValue) System.Console.WriteLine("Ricevuto valore " & RedisValue.ToString() & " dal canale " & RedisChannel.ToString()) End Sub End Module