示例#1
0
文件: HNode.cs 项目: xnumad/Sulakore
 public ValueTask <HPacket> ReceiveAsync()
 {
     if (ReceiveFormat == null)
     {
         throw new NullReferenceException($"Cannot receive structued data while {nameof(ReceiveFormat)} is null.");
     }
     return(ReceiveFormat.ReceivePacketAsync(this));
 }
示例#2
0
    public async ValueTask <short> ReceivePacketAsync(IBufferWriter <byte> writer, CancellationToken cancellationToken = default)
    {
        if (ReceiveFormat == null)
        {
            ThrowHelper.ThrowNullReferenceException(nameof(ReceiveFormat));
        }

        short packetId = 0;
        await _packetReceiveSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);

        try
        {
            Memory <byte> buffer = writer.GetMemory(ReceiveFormat.MinBufferSize);

            int received = 0;
            do
            {
                received = await ReceiveAsync(buffer, cancellationToken).ConfigureAwait(false);
            }while (received == 0);

            if (received != buffer.Length)
            {
                return(0);
            }
            if (!ReceiveFormat.TryReadHeader(buffer.Span, out int length, out packetId, out _))
            {
                return(0);
            }

            writer.Advance(received);
            int packetBytesLeft = length - ReceiveFormat.MinPacketLength;

            // TODO: Populate the writer...
        }
        finally
        {
            PacketsReceived++;
            _packetReceiveSemaphore.Release();
        }

        return(packetId);
    }
示例#3
0
        /// <summary>
        /// 测试传入字典类
        /// </summary>
        /// <param name="receiveFormat">接收参数实体</param>
        /// <returns></returns>
        public JObject PostByClassDictionary(ReceiveFormat receiveFormat)
        {
            string ActionType = receiveFormat.ActionType;
            Dictionary <string, string> dic = receiveFormat.Dic;

            JObject obj = new JObject();
            bool    IsSuccess = false;
            string  ErrorCode = string.Empty, ErrorMessage = string.Empty;

            foreach (var item in dic)
            {
                ErrorCode    = item.Key;
                ErrorMessage = item.Value;
            }

            obj.Add("IsSuccess", IsSuccess);
            obj.Add("ErrorCode", ErrorCode);
            obj.Add("ErrorMessage", ErrorMessage);
            return(obj);
        }
示例#4
0
        /// <summary>
        /// 测试根据传入字典构建存储过程参数化-执行
        /// </summary>
        /// <param name="receiveFormat"></param>
        /// <returns></returns>
        public HttpResponseMessage Exec_ProceDure(ReceiveFormat receiveFormat)
        {
            string           connstr = DBHelp.GetConnectString();
            OracleConnection conn    = new OracleConnection();

            conn.ConnectionString = connstr;
            conn.Open();
            OracleCommand comm = new OracleCommand();

            comm.Connection  = conn;
            comm.CommandType = CommandType.StoredProcedure;
            comm.CommandText = "PRO_GETUSERSBYORGID";

            //参数
            List <OracleParameter> ps = new List <OracleParameter>();

            //传入参数
            OracleParameter p1 = new OracleParameter("IN_ORGID", OracleDbType.Varchar2);

            p1.Direction = ParameterDirection.Input;
            p1.Value     = "672";
            ps.Add(p1);

            //传出参数
            OracleParameter p2 = new OracleParameter("OUT_COUNT", OracleDbType.Decimal);

            p2.Direction = ParameterDirection.Output;
            ps.Add(p2);

            OracleParameter p3 = new OracleParameter("Out_Result", OracleDbType.RefCursor);

            p3.Direction = ParameterDirection.Output;
            ps.Add(p3);

            foreach (OracleParameter p in ps)
            {
                comm.Parameters.Add(p);
            }

            OracleDataAdapter da     = new OracleDataAdapter(comm);
            DataSet           Out_ds = new DataSet();

            da.Fill(Out_ds);

            DataTable Out_dt = new DataTable();

            da.Fill(Out_dt);


            int total = comm.ExecuteNonQuery();

            decimal OUT_COUNT = Convert.ToDecimal(comm.Parameters["OUT_COUNT"].Value.ToString());

            Oracle.ManagedDataAccess.Types.OracleRefCursor oracleRefCursor = (Oracle.ManagedDataAccess.Types.OracleRefCursor)comm.Parameters["Out_Result"].Value;


            #region 将oracleDataReader装DataTable
            OracleDataReader oracleDataReader    = comm.ExecuteReader();
            DataTable        dt_oracleDataReader = new DataTable();
            for (int i = 0; i < oracleDataReader.FieldCount; i++)
            {
                DataColumn column = new DataColumn
                {
                    ColumnName = oracleDataReader.GetName(i),
                    DataType   = oracleDataReader.GetFieldType(i)
                };
                dt_oracleDataReader.Columns.Add(column);
            }
            while (oracleDataReader.Read())
            {
                DataRow dataRow = dt_oracleDataReader.NewRow();
                for (int i = 0; i < oracleDataReader.FieldCount; i++)
                {
                    dataRow[i] = oracleDataReader[i];
                }
                dt_oracleDataReader.Rows.Add(dataRow.ItemArray);
            }

            #endregion


            #region 测试根据传入字典构建存储过程参数化
            string ProcedureName = receiveFormat.ActionType;

            comm             = new OracleCommand();
            comm.Connection  = conn;
            comm.CommandType = CommandType.StoredProcedure;
            comm.CommandText = ProcedureName;

            //参数
            List <OracleParameter> ps_dic = new List <OracleParameter>();
            foreach (var item in receiveFormat.Dic)
            {
                OracleParameter op = new OracleParameter(item.Key, OracleDbType.Varchar2);
                op.Value = 672;
                ps_dic.Add(op);
            }
            foreach (var item in ps_dic)
            {
                comm.Parameters.Add(item);
            }

            OracleDataAdapter da2     = new OracleDataAdapter(comm);
            DataTable         Out_dt2 = new DataTable();
            da2.Fill(Out_dt2);



            #endregion


            conn.Close();
            conn.Dispose();

            string a = JsonConvert.SerializeObject(Out_dt);
            string b = JsonConvert.SerializeObject(Out_ds);
            bool   c = a == b;
            HttpResponseMessage responseMessage = DBHelp.ConvertToHttpResponseMessage(Out_dt);
            return(responseMessage);
        }