Exemplo n.º 1
0
        /// <summary>
        /// 处理Scalar函数
        /// </summary>
        /// <param name="cmd">数据库命令</param>
        public DictNode HandleScalar(DbCommand cmd)
        {
            object obj;

            using (DbConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                cmd.Connection = conn;
                obj            = cmd.ExecuteScalar();
            }

            DictNode result = new DictNode();

            result.Add("code", 3);
            BEncodedNode itemNode = CreateItemNode(obj);

            result.Add("item", itemNode);

            ListNode parmlistNode = CreateParmListNode(cmd);

            if (parmlistNode.Count != 0)
            {
                result.Add("parmlist", parmlistNode);
            }
            return(result);
        }
Exemplo n.º 2
0
        private void HandleParmsNode(BEncodedNode parmlistNode)
        {
            ListNode parmsNode = (ListNode)parmlistNode;

            foreach (BEncodedNode node in parmsNode)
            {
                DictNode parmNode = (DictNode)node;
                string   name     = ((BytesNode)parmNode["name"]).StringText;
                string   typeName = ((BytesNode)parmNode["type"]).StringText;
                parameters[name].Value = NodeEncoder.GetObject(typeName, (BytesNode)parmNode["value"]);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Get the list of peers
        /// </summary>
        /// <param name="node">The response node that received from tracker</param>
        /// <returns>Return the list of peers</returns>
        private List <Peer> GetPeers(DictNode node)
        {
            List <Peer> peers = new List <Peer>();

            BEncodedNode peersNode = node["peers"];

            if (peersNode is BytesNode)
            {
                var peersBytes = ((BytesNode)peersNode).ByteArray;
                for (int i = 0; i < peersBytes.Length; i += 6)
                {
                    string host = string.Format("{0}.{1}.{2}.{3}", peersBytes[i], peersBytes[i + 1], peersBytes[i + 2],
                                                peersBytes[i + 3]);
                    int  port = (peersBytes[i + 4] << 8) + peersBytes[i + 5];
                    Peer peer = new Peer
                    {
                        Host = host,
                        Port = port,
                    };
                    peers.Add(peer);
                }
            }

            else if (peersNode is ListNode)
            {
                var listNode = peersNode as ListNode;
                for (int i = 0; i < listNode.Count; i++)
                {
                    DictNode dictNode = listNode[i] as DictNode;
                    string   peerId   = ((BytesNode)dictNode["peer id"]).StringText;
                    string   ip       = ((BytesNode)dictNode["ip"]).StringText;
                    int      port     = ((IntNode)dictNode["port"]).IntValue;
                    Peer     peer     = new Peer
                    {
                        Host = ip,
                        Port = port
                    };
                    peers.Add(peer);
                }
            }

            return(peers);
        }