View Full Version : what is the best way to detect NR disconnect ?
mhwlng
May 13th, 2007, 11:18 AM
I have :
* PC A with G5,
* PC B with JRMC,zoomplayer etc. (also has G5 installed and connected via G2G to PC A)
* several NR clients
from PC A, I want to switch on PC B (by sending magic packet) as soon as any NR connects to PC A...
and I want to switch PC B to standby (via G2G), when there are no more NR clients connected to the PC A (always on).
so I need an event that gets called when any NR client connects and disconnects and then I need a way to see the number of active NR clients ?
what is the best way to do this ?
I assume that I need to connect to these events:
Time Date Source Details Payloads
18:25:26:859 5/13/2007 Communication Server New Client Connection 192.168.1.33 3385
....
...
18:25:59:777 5/13/2007 Communication Server Close Connection 192.168.1.33 3385
18:25:59:737 5/13/2007 Communication Server Close Connection
although I'm not sure why I see Close Connection twice ?
Marcel
mhwlng
May 13th, 2007, 01:37 PM
never mind, I figured it out
this gives me the number of active clients :
local cnt = 0;
for _, client in pairs(NetRemote.GetConnectedClientList()) do
if (client.Connected==true) then
cnt=cnt+1;
end
end
print (cnt);
although I'm not sure why I see Close Connection twice ?
only one of the two log entries is the event, the other one is a log message....
Marcel
mhwlng
May 16th, 2007, 03:07 AM
I have some strange results :
these are actually G2G connections :
PC 1 (192.168.1.62)
Time Date Source Details Payloads
09:56:05:695 5/16/2007 NetRemote Connection from 192.168.1.64:20005
09:56:05:695 5/16/2007 Communication Server Outgoing Connection Authenticated
09:56:05:554 5/16/2007 Communication Server New Client Connection 192.168.1.64 20005
PC 2 (192.168.1.64)
Time Date Source Details Payloads
09:57:07:718 5/16/2007 NetRemote Connection from 192.168.1.62:4867
09:57:07:703 5/16/2007 Communication Server New Client Connection 192.168.1.62 4867
09:57:07:703 5/16/2007 Communication Server Connection Authenticated 192.168.1.62 GIRDER
08:50:50:203 5/16/2007 Communication Server Existing Client GIRDER tabletpc 192.168.1.62 20005
08:50:50:203 5/16/2007 Communication Server: Servers Server (GIRDER): tabletpc, @ 192.168.1.62:20005
08:50:50:171 5/16/2007 Communication Server Existing Client GIRDER server 192.168.1.64 20005
08:50:50:171 5/16/2007 Communication Server Existing Client MediaBridge server 192.168.1.64 20003
08:50:50:171 5/16/2007 Communication Server: Servers Server (GIRDER): server, @ 192.168.1.64:20005
08:50:50:171 5/16/2007 Communication Server: Servers Server (MediaBridge): server, @ 192.168.1.64:20003
so above method doesn't work properly as G2G connections are sometimes seen as active NetRemote connections...
note that this doesn't always happen.
if I now stop/start G5 on 192.168.1.64, I see this on 192.168.1.62 :
Time Date Source Details Payloads
10:12:46:111 5/16/2007 Communication Server: Servers Server (GIRDER): tabletpc, @ 192.168.1.62:20005
10:12:46:111 5/16/2007 Communication Server: Servers Server (GIRDER): server, @ 192.168.1.64:20005
10:12:46:111 5/16/2007 Communication Server: Servers Server (MediaBridge): dev, @ 192.168.1.33:20003
10:12:46:111 5/16/2007 Communication Server: Servers Server (MediaBridge): server, @ 192.168.1.64:20003
10:12:46:001 5/16/2007 Communication Server Existing Client GIRDER tabletpc 192.168.1.62 20005
10:12:46:001 5/16/2007 Communication Server Existing Client GIRDER server 192.168.1.64 20005
10:12:45:991 5/16/2007 Communication Server Existing Client MediaBridge dev 192.168.1.33 20003
10:12:45:981 5/16/2007 Communication Server Existing Client MediaBridge server 192.168.1.64 20003
10:12:43:581 5/16/2007 Communication Server Existing Client GIRDER tabletpc 192.168.1.62 20005
10:12:43:561 5/16/2007 Communication Server Existing Client GIRDER server 192.168.1.64 20005
10:12:43:561 5/16/2007 Communication Server Existing Client MediaBridge dev 192.168.1.33 20003
10:12:43:621 5/16/2007 Communication Server: Servers Server (GIRDER): tabletpc, @ 192.168.1.62:20005
10:12:43:621 5/16/2007 Communication Server: Servers Server (GIRDER): server, @ 192.168.1.64:20005
10:12:43:621 5/16/2007 Communication Server: Servers Server (MediaBridge): dev, @ 192.168.1.33:20003
10:12:43:621 5/16/2007 Communication Server: Servers Server (MediaBridge): server, @ 192.168.1.64:20003
10:12:43:431 5/16/2007 Communication Server Existing Client MediaBridge server 192.168.1.64 20003
now, I don't see an NR connection (which is correct) ???
Marcel
mhwlng
May 16th, 2007, 03:51 AM
some more info on this,
the G2G-connecting-as-NetRemote seems to happen after I stop a real NR pc (192.168.1.35) ????
Time Date Source Details Payloads
10:40:02:945 5/16/2007 NetRemote Connection from 192.168.1.64:20005
10:40:02:895 5/16/2007 Communication Server New Client Connection 192.168.1.64 20005
10:40:02:814 5/16/2007 Communication Server Outgoing Connection Authenticated
10:39:02:437 5/16/2007 NetRemote Exiting feedback thread for 192.168.1.35
10:39:02:437 5/16/2007 NetRemote Closing client for 192.168.1.35
10:39:02:437 5/16/2007 NetRemote Unregistering NetRemote client 192.168.1.35:3197
10:39:02:437 5/16/2007 NetRemote Connection closing 192.168.1.35:3197
10:39:02:227 5/16/2007 Communication Server Close Connection 192.168.1.35 3197
10:39:02:257 5/16/2007 Communication Server Close Connection
I think this G2G connection does not show up in
NetRemote.GetConnectedClientList()
and here I switch the 192.168.1.64 G5 pc to standby, then this is what I see on 192.168.1.62
it activates a false netremote connection while the G5 pc is shutting down and immediately closes it again ???
Time Date Source Details Payloads
10:55:47:602 5/16/2007 Girder to Girder ClientOffline SERVER 192.168.1.64
10:55:47:502 5/16/2007 Communication Server Close Connection 192.168.1.64 20005
10:55:47:482 5/16/2007 Communication Server New Client Connection 192.168.1.64 20005
10:55:47:522 5/16/2007 NetRemote Connection closing 192.168.1.64:20005
10:55:47:522 5/16/2007 Communication Server Close Connection
10:55:47:522 5/16/2007 NetRemote Connection from 192.168.1.64:20005
10:55:47:522 5/16/2007 Communication Server Outgoing Connection Authenticated
Marcel
Rob H
May 16th, 2007, 05:08 AM
That's weird, sounds as though the message is being logged prematurely, ie before it has established that it's a real NetRemote client. If it's a real NR connection you should see an 'Adding client' message as well. I should probably remove the first message as it is clearly misleading.
BTW you should be able to use NetRemote.RegisterConnectCallback and NetRemote.RegisterDisconnectCallback to track real, verified NR client connections and disconnections. The callback function takes the actual client as a parameter.
Thanks for asking about this actually, I'd quite forgotten about it and happened to need it myself today :)
mhwlng
May 16th, 2007, 05:50 AM
you should be able to use NetRemote.RegisterConnectCallback and NetRemote.RegisterDisconnectCallback
Thanks Rob,
That works ok...
p.s. I 've also added 1 minute timer to the standby mechanism in RegisterDisconnectCallback. So that my JRMC pc doesn't switch off, if there was only a WIFI comms error causing a short disconnect...
Marcel
Rob H
May 16th, 2007, 10:43 AM
By the way, you should probably check client.connectionValid in your connect callback to be on the safe side.
mhwlng
May 16th, 2007, 10:50 AM
well... I have to check for any client, not just the one causing the callback..
so I use GetConnectedClientList :
Marcel = Marcel or {}
Marcel.NetRemote = Marcel.NetRemote or {}
Marcel.NetRemote.Interval = 60000;
Marcel.NetRemote.NetRemoteTimer = nil
function Marcel.NetRemote.clientconnect (client)
if (Marcel.NetRemote.NetRemoteTimer ~= nil) then
Marcel.NetRemote.NetRemoteTimer:Destroy();
Marcel.NetRemote.NetRemoteTimer = nil
end
gir.LogMessage ("Marcel.NetRemote","Wake Up Server",0)
ret,err =win.WakeOverLan("192.168.1.255", "00:19:DB:29:9E:AA")
end
function Marcel.NetRemote.TimerUpdate()
local cnt = 0;
for _, client in pairs(NetRemote.GetConnectedClientList()) do
if (client.Connected==true) then
gir.LogMessage ("Marcel.NetRemote","still connected "..client.Host,0)
cnt=cnt+1;
end
end
if (cnt==0) then
gir.LogMessage ("Marcel.NetRemote","Stand By Server",0)
g2g.SendEvent("G2GSTANDBY",nil,nil,"");
end
end
function Marcel.NetRemote.clientdisconnect (client)
if (Marcel.NetRemote.NetRemoteTimer ~= nil) then
Marcel.NetRemote.NetRemoteTimer:Destroy();
Marcel.NetRemote.NetRemoteTimer = nil
end
Marcel.NetRemote.NetRemoteTimer = gir.CreateTimer (nil,function (...)
return Marcel.NetRemote.TimerUpdate (unpack (arg))
end,nil,false)
Marcel.NetRemote.NetRemoteTimer:Arm (Marcel.NetRemote.Interval)
end
NetRemote.RegisterConnectCallback(function (...) Marcel.NetRemote.clientconnect(unpack(arg)) end);
NetRemote.RegisterDisconnectCallback (function (...) Marcel.NetRemote.clientdisconnect(unpack(arg)) end);
Marcel
Rob H
May 16th, 2007, 11:28 AM
Right. You could also use NetRemote.EnumerateClients passing in a function to call for each client. See the implementation of GetConnectedClientList for the usage.
Powered by vBulletin® Version 4.2.0 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.