Fixing Usage of Network port

This commit is contained in:
BlubbFish 2011-01-28 20:30:32 +00:00
parent 5b32a2a00e
commit f019b4e493
2 changed files with 84 additions and 23 deletions

View File

@ -111,7 +111,7 @@ namespace NetOpenVpnGui
{ {
this.Statuslog.Items.Add(text); this.Statuslog.Items.Add(text);
this.trayIcon.BalloonTipIcon = toolTipIcon; this.trayIcon.BalloonTipIcon = toolTipIcon;
this.trayIcon.BalloonTipText = text; this.trayIcon.BalloonTipText = sr.service + " " + text;
this.trayIcon.BalloonTipTitle = title; this.trayIcon.BalloonTipTitle = title;
} }
} }

View File

@ -14,45 +14,106 @@ namespace NetOpenVpnGui
private IPEndPoint net_send_port; private IPEndPoint net_send_port;
private UdpClient net_gets; private UdpClient net_gets;
private IPEndPoint net_gets_port; private IPEndPoint net_gets_port;
private string messageReceivedString;
private bool messageReceived;
private bool net_init = false;
public Runner(String p) public Runner(String p)
{ {
this.service = p; this.service = p;
this.net_send = new UdpClient();
this.net_send_port = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 34523);
this.net_gets = new UdpClient(34524);
this.net_gets_port = new IPEndPoint(IPAddress.Loopback, 0);
} }
public bool run_service() public bool run_service()
{ {
byte[] data = Encoding.UTF8.GetBytes("service start " + this.service); return this.send("service start " + this.service);
this.net_send.Send(data, data.Length, this.net_send_port);
bool ret = Boolean.Parse(Encoding.UTF8.GetString(net_gets.Receive(ref net_gets_port)));
if (ret)
return true;
return false;
} }
public bool stop_service() public bool stop_service()
{ {
byte[] data = Encoding.UTF8.GetBytes("service stop " + this.service); return this.send("service stop " + this.service);
this.net_send.Send(data, data.Length, this.net_send_port);
bool ret = Boolean.Parse(Encoding.UTF8.GetString(net_gets.Receive(ref net_gets_port)));
if (ret)
return true;
return false;
} }
public bool check_service() public bool check_service()
{ {
byte[] data = Encoding.UTF8.GetBytes("service status " + this.service); return this.send("service status " + this.service);
}
private bool send(string p)
{
this.init();
byte[] data = Encoding.UTF8.GetBytes(p);
this.net_send.Send(data, data.Length, this.net_send_port); this.net_send.Send(data, data.Length, this.net_send_port);
bool ret = Boolean.Parse(Encoding.UTF8.GetString(net_gets.Receive(ref net_gets_port))); //net_gets.Receive(ref net_gets_port);
if (ret)
return true; UdpState s = new UdpState();
s.e = net_gets_port;
s.u = net_gets;
this.messageReceived = false;
net_gets.BeginReceive(new AsyncCallback(ReceiveCallback), s);
int i=0;
while (!this.messageReceived && i++<100)
{
System.Threading.Thread.Sleep(100);
}
if (!this.messageReceived)
{
this.close();
return false; return false;
} }
this.close();
return Boolean.Parse(this.messageReceivedString);
}
private void close()
{
if (this.net_init)
{
this.net_init = false;
this.net_gets.Close();
this.net_send.Close();
}
}
private void init()
{
if (!this.net_init)
{
this.net_init = true;
this.net_send = new UdpClient();
this.net_gets = new UdpClient(34524);
this.net_send_port = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 34523);
this.net_gets_port = new IPEndPoint(IPAddress.Loopback, 0);
}
}
private void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;
try
{
Byte[] receiveBytes = u.EndReceive(ar, ref e);
this.messageReceivedString = Encoding.UTF8.GetString(receiveBytes);
this.messageReceived = true;
}
catch (Exception)
{
this.messageReceivedString = "";
this.messageReceived = false;
}
}
public string service { get; set; } public string service { get; set; }
} }
public class UdpState
{
public IPEndPoint e;
public UdpClient u;
} }
}