void ThreadUpdate()
{
while (true)
{
try
{
ReadNetwork();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Disconnect();
}
switch (mStatus)
{
case Status.Disconnected:
if (mURL != null && mPort != 0)
{
// We have something to try to connect to, do it now
mSocketAsync = mSocket.BeginConnect(mURL, (int)mPort, null, null);
mStatus = Status.Connecting;
}
break;
case Status.Connecting:
{
if (mSocketAsync.IsCompleted)
{
mSocket.EndConnect(mSocketAsync);
if (mSocket.Connected)
{
mStatus = Status.Connected;
mRPCID = 1;
}
else
Disconnect();
mSocketAsync = null;
}
}
break;
case Status.Connected:
{
// Now connected, subscribe for mining
SendRPC("mining.subscribe", null);
mExtraNOnceSize = -1;
mStatus = Status.Subscribing;
}
break;
case Status.Subscribing:
if (mExtraNOnceSize >= 0 && mUser != null && mPass != null)
{
// Done subscribing for mining, now authorize the worker
// {"params": ["slush.miner1", "password"], "id": 2, "method": "mining.authorize"}
string[] parms = new string[2];
parms[0] = mUser;
parms[1] = mPass;
SendRPC("mining.authorize", parms);
mStatus = Status.Authorizing;
}
break;
case Status.Authorizing:
if( mAuthorized )
{
mStatus = Status.Ready;
}
break;
case Status.Ready:
break;
}
Thread.Sleep(50);
}
}