That certainly looks like it should work.
On Thu, Feb 2, 2017 at 2:12 AM, Jörg Krause <[email protected]>
wrote:
> Hey Ryan,
>
> On Sunday, January 29, 2017 at 8:04:42 PM UTC+1, Ryan Phillips wrote:
>>
>> Hey Jörg,
>>
>> In your doConnect function you will want to instantiate a new socket
>> there. You can't reuse the same socket instance.
>>
>
> I changed my client implementation and it seems to work now:
>
> local fs = require('fs')
> local spawn = require('childprocess').spawn
> local net = require('net')
>
> local args = {
> "-M",
> "-D", "record_left",
> "-t", "raw",
> "-c", "1",
> "-r", "48000",
> "-f", "S16_LE",
> }
>
> local function doConnect()
> local arecord
> local sock
>
> local ip = "192.168.0.101"
> local port = 1234
>
> if not ip or not port then return end
>
> print(string.format("Connecting to %s:%s", ip, port))
> sock = net.createConnection(port, string.format("%s", ip))
>
> sock:on("connect", function (err)
> if err then print("Connection error:", err) end
> print("Connected")
>
> arecord = spawn("arecord", args)
>
> arecord:on("error", function(err)
> print("Spawn error:", err)
> end)
> arecord:on("exit", function(exit_status)
> print("Exit with " .. exit_status)
> sock:setTimeout(1000, doConnect)
> end)
>
> arecord.stdout:on('data', function(data)
> sock:write(data)
> end)
> arecord.stderr:pipe(process.stderr)
> end)
>
> sock:on("error", function(err)
> if err then
> print("Socket error:", err)
> if arecord then
> arecord:kill('sigkill')
> else
> sock:setTimeout(1000, doConnect)
> end
> end
> end)
> end
>
> doConnect()
>
> However, I am not sure if it is done correct. Maybe this implementation
> still has some flaws?
>
>
>
>> On Wed, Jan 18, 2017 at 10:52 AM, Jörg Krause <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> I am trying to implement a client which tries to reconnect to server if,
>>> for whatever reason, is not available sometimes. My application is about
>>> piping the stdout of arecord to a TCP socket on a server. The application
>>> works fine, but is not bullet-proof if the server is not ready or is
>>> restarted. I want the client to reconnect to the server, without the need
>>> of a process monitor on the client side.
>>>
>>> I found a similar nodejs example: https://gist.github.c
>>> om/sio2boss/6334089
>>>
>>> local spawn = require('childprocess').spawn
>>> local net = require('net')
>>>
>>> local args = {
>>> "-M",
>>> "-D", "hw:0,1",
>>> "-t", "raw",
>>> "-c", "2",
>>> "-r", "48000",
>>> "-f", "S16_LE",
>>> }
>>>
>>> local sock
>>> sock = net.Socket:new()
>>>
>>> local function doConnect()
>>> print("Connecting...")
>>>
>>> sock:connect(1234, '192.168.1.157')
>>> end
>>>
>>> local function onConnect()
>>> print("Connected")
>>> local arecord
>>>
>>> arecord = spawn("arecord", args)
>>>
>>> arecord:on("error", function(err)
>>> print("Spawn error:", err)
>>> end)
>>> arecord:on("exit", function(exit_status)
>>> print("Exit with " .. exit_status)
>>> end)
>>>
>>> arecord.stdout:pipe(sock)
>>> arecord.stderr:pipe(sock)
>>> end
>>>
>>> local function onError(err)
>>> print("Socket error:", err)
>>> if err == 'ECONNREFUSED' then
>>> sock:setTimeout(1000, doConnect)
>>> elseif err == 'EPIPE' then
>>> sock:setTimeout(1000, doConnect)
>>> end
>>> end
>>>
>>> sock:on("connect", onConnect)
>>> sock:on("error", onError)
>>>
>>> doConnect()
>>>
>>>
>>> The client tries one time to reconnect, but not more:
>>>
>>> # luvit client.lua
>>> Connecting...
>>> Socket error: ECONNREFUSED
>>> Connecting...
>>> #
>>>
>>> Any idea what is wrong with my code?
>>>
>>> Best regards,
>>> Jörg Krause
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "luvit" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "luvit" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"luvit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.