Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
                }
            }
        }