static void MinerClient(TcpClient client) { MinerClientData miner = null; try { NetworkStream clientStream = client.GetStream(); Thread.CurrentThread.Name = "Client - " + client.Client.RemoteEndPoint; miner = new MinerClientData(client, new StreamReader(clientStream), new StreamWriter(clientStream)); int userid = -1; string clientString; while (true) { try { clientString = miner.clientReader.ReadLine(); if (clientString == null) { // client bezarta a kapcsolatot break; } Console.WriteLine("CL>: " + clientString); Request r = JsonConvert.DeserializeObject<Request>(clientString); if (r.Method.Equals("mining.subscribe")) { /* // FIXME: ossze kell rakni ertelmes valaszt string extranonce = string.Format("{0}{1,2:X2}", extranonce1, extranonce2++); JArray array = new JArray(startnotify, extranonce, extranonce2_size - 1); StratumResult response = new StratumResult(1, array, null); miner.clientWriter.WriteLine(response.ToString()); */ miner.extranonce = string.Format("{0,2:X2}", extranonce2++); miner.clientWriter.WriteLine(string.Format("{{\"id\": 1, \"result\": [{0}, \"{1}{2}\", {3}], \"error\": null}}", startnotify, extranonce1, miner.extranonce, extranonce2_size - 1)); if (difficulty > 0) { miner.clientWriter.WriteLine(string.Format("{{\"params\": [{0}], \"id\": null, \"method\": \"mining.set_difficulty\"}}", difficulty)); } continue; } if (r.Method.Equals("mining.authorize")) { if (r.Params.Count < 2) { break; } // itt le kene ellenorzni ki/mi o userid = GetUser(r.Params[0].ToString(), r.Params[1].ToString()); miner.clientWriter.WriteLine(string.Format("{{\"error\": null, \"id\": {0}, \"result\": true}}", r.Id)); if (miningnotify != null) { miner.clientWriter.WriteLine(miningnotify); } miners.Add(miner); continue; } if (userid == -1) { // nem autholt, dobjuk break; } if (r.Method.Equals("mining.submit")) { // jee user kuldott valami sharet int oldid = r.Id; JArray result = (JArray)r.Params; r.Id = serverid++; // uj idt generaltunk. result[2] = miner.extranonce + result[2]; // TODO: le kene menteni dbbe a sharet submitids.Add(r.Id, new MinerSubmit { id = oldid, miner = miner }); string o = JsonConvert.SerializeObject(r, Formatting.None); serverWriter.WriteLine(o); } else { serverWriter.WriteLine(clientString); } } catch { // Socket error or client disconnected - exit loop. Client will have to reconnect. break; } } if (miners.Contains(miner)) { miners.Remove(miner); } client.Close(); } catch { // nagy global mindent elkapo kivetel if (miners.Contains(miner)) { miners.Remove(miner); } } }
static void MinerClient(TcpClient client) { MinerClientData miner = null; try { NetworkStream clientStream = client.GetStream(); Thread.CurrentThread.Name = "Client - " + client.Client.RemoteEndPoint; miner = new MinerClientData(client, new StreamReader(clientStream), new StreamWriter(clientStream)); int userid = -1; string clientString; while (true) { try { clientString = miner.clientReader.ReadLine(); if (clientString == null) { // client bezarta a kapcsolatot break; } Console.WriteLine("CL>: " + clientString); Request r = JsonConvert.DeserializeObject <Request>(clientString); if (r.Method.Equals("mining.subscribe")) { /* * // FIXME: ossze kell rakni ertelmes valaszt * string extranonce = string.Format("{0}{1,2:X2}", extranonce1, extranonce2++); * JArray array = new JArray(startnotify, extranonce, extranonce2_size - 1); * StratumResult response = new StratumResult(1, array, null); * miner.clientWriter.WriteLine(response.ToString()); */ miner.extranonce = string.Format("{0,2:X2}", extranonce2++); miner.clientWriter.WriteLine(string.Format("{{\"id\": 1, \"result\": [{0}, \"{1}{2}\", {3}], \"error\": null}}", startnotify, extranonce1, miner.extranonce, extranonce2_size - 1)); if (difficulty > 0) { miner.clientWriter.WriteLine(string.Format("{{\"params\": [{0}], \"id\": null, \"method\": \"mining.set_difficulty\"}}", difficulty)); } continue; } if (r.Method.Equals("mining.authorize")) { if (r.Params.Count < 2) { break; } // itt le kene ellenorzni ki/mi o userid = GetUser(r.Params[0].ToString(), r.Params[1].ToString()); miner.clientWriter.WriteLine(string.Format("{{\"error\": null, \"id\": {0}, \"result\": true}}", r.Id)); if (miningnotify != null) { miner.clientWriter.WriteLine(miningnotify); } miners.Add(miner); continue; } if (userid == -1) { // nem autholt, dobjuk break; } if (r.Method.Equals("mining.submit")) { // jee user kuldott valami sharet int oldid = r.Id; JArray result = (JArray)r.Params; r.Id = serverid++; // uj idt generaltunk. result[2] = miner.extranonce + result[2]; // TODO: le kene menteni dbbe a sharet submitids.Add(r.Id, new MinerSubmit { id = oldid, miner = miner }); string o = JsonConvert.SerializeObject(r, Formatting.None); serverWriter.WriteLine(o); } else { serverWriter.WriteLine(clientString); } } catch { // Socket error or client disconnected - exit loop. Client will have to reconnect. break; } } if (miners.Contains(miner)) { miners.Remove(miner); } client.Close(); } catch { // nagy global mindent elkapo kivetel if (miners.Contains(miner)) { miners.Remove(miner); } } }