示例#1
0
        /// <summary>
        /// This will be called before a client Interface gets called.
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public bool ProessRequest(NetworkStream stream)
        {
            try
            {
                BinaryBuffer buff = new BinaryBuffer(Database.ReadBuffer(stream));

                buff.BeginRead();

                int count = buff.ReadInt();

                BinaryBuffer writeBuff = new BinaryBuffer();

                writeBuff.BeginWrite();

                for (int i = 0; i < count; i++)
                {
                    IClientRequest Request = CurrentServer.GetRequest(buff.ReadByte());
                    // if a IClientRequest to close. we need to handle by not reading and writing back!
                    if (!this.TcpConnection.Connected)
                    {
                        return(false);
                    }

                    byte[] data = buff.ReadByteArray(buff.ReadInt());
                    if (Request != null)
                    {
                        data = Request.Process(new BinaryBuffer(data), this);
                        writeBuff.Write(data.Length);
                        writeBuff.Write(data);
                    }
                    else
                    {
                        writeBuff.Write(0); // length;
                    }
                }

                writeBuff.EndWrite();

                Database.WriteBuffer(writeBuff.ByteBuffer, stream);

                return(true);
            }
            catch (Exception)
            { }
            return(false);
        }
示例#2
0
        /// <summary>
        /// This will be called before a client Interface gets called.
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public bool ProessRequest(NetworkStream stream)
        {
            try
            {
                BinaryBuffer buff = new BinaryBuffer(Database.ReadBuffer(stream));

                buff.BeginRead();

                int count = buff.ReadInt();

                BinaryBuffer writeBuff = new BinaryBuffer();

                writeBuff.BeginWrite();

                for (int i = 0; i < count;i++)
                {
                    IClientRequest Request = CurrentServer.GetRequest(buff.ReadByte());
                    // if a IClientRequest to close. we need to handle by not reading and writing back!
                    if (!this.TcpConnection.Connected)
                        return false;

                    byte[] data = buff.ReadByteArray(buff.ReadInt());
                    if(Request != null)
                    {
                        data = Request.Process(new BinaryBuffer(data), this);
                        writeBuff.Write(data.Length);
                        writeBuff.Write(data);
                    }
                    else
                    {
                        writeBuff.Write(0); // length;
                    }
                }

                writeBuff.EndWrite();

                Database.WriteBuffer(writeBuff.ByteBuffer, stream);

                return true;
            }
            catch (Exception)
            { }
            return false;
        }
示例#3
0
        public static DataTable ConvertBlobToDataTable(ref byte[] data)
        {
            DataTable dt = null;

            if (data == null || data.Length == 0)
            {
                return(dt);
            }

            BinaryBuffer buff = new BinaryBuffer(data);

            buff.BeginRead();

            buff.ReadInt();

            int ColumnCount = buff.ReadInt();

            if (ColumnCount > 0)
            {
                dt = new DataTable();
                TypeCode[] types = new TypeCode[ColumnCount];
                for (int i = 0; i < ColumnCount; i++)
                {
                    string   colName = buff.ReadString(buff.ReadInt());
                    TypeCode type    = (TypeCode)buff.ReadByte();
                    types[i] = type;

                    switch (type)
                    {
                    case TypeCode.Boolean:
                        dt.Columns.Add(colName, typeof(Boolean));
                        break;

                    case TypeCode.Byte:
                        dt.Columns.Add(colName, typeof(byte));
                        break;

                    case TypeCode.Char:
                        dt.Columns.Add(colName, typeof(char));
                        break;

                    case TypeCode.DateTime:
                        dt.Columns.Add(colName, typeof(DateTime));
                        break;

                    case TypeCode.DBNull:
                        dt.Columns.Add(colName);
                        break;

                    case TypeCode.Decimal:
                        dt.Columns.Add(colName, typeof(decimal));
                        break;

                    case TypeCode.Double:
                        dt.Columns.Add(colName, typeof(double));
                        break;

                    case TypeCode.Empty:
                        dt.Columns.Add(colName);
                        break;

                    case TypeCode.Int16:
                        dt.Columns.Add(colName, typeof(short));
                        break;

                    case TypeCode.Int32:
                        dt.Columns.Add(colName, typeof(int));
                        break;

                    case TypeCode.Int64:
                        dt.Columns.Add(colName, typeof(long));
                        break;

                    case TypeCode.Single:
                        dt.Columns.Add(colName, typeof(float));
                        break;

                    case TypeCode.String:
                        dt.Columns.Add(colName, typeof(string));
                        break;

                    default:
                        dt.Columns.Add(colName);
                        break;
                    }
                }

                int RowCount = buff.ReadInt();

                dt.BeginLoadData();

                for (int i = 0; i < RowCount; i++)
                {
                    //DataRow dr = dt.NewRow();
                    object[] obj = new object[ColumnCount];
                    for (int y = 0; y < ColumnCount; y++)
                    {
                        TypeCode type = (TypeCode)buff.ReadByte();

                        switch (type)
                        {
                        case TypeCode.Byte:
                        case TypeCode.Boolean:
                            obj[y] = buff.ReadByte();
                            break;

                        case TypeCode.String:
                            obj[y] = buff.ReadString(buff.ReadInt());
                            break;

                        case TypeCode.Int16:
                            obj[y] = BitConverter.ToInt16(buff.ReadByteArray(2), 0);
                            break;

                        case TypeCode.Int32:
                            obj[y] = buff.ReadInt();
                            break;

                        case TypeCode.Int64:
                            obj[y] = buff.ReadLong();
                            break;

                        case TypeCode.Single:
                            obj[y] = buff.ReadFloat();
                            break;

                        case TypeCode.Double:
                            obj[y] = BitConverter.ToDouble(buff.ReadByteArray(8), 0);
                            break;

                        case TypeCode.Decimal:
                            obj[y] = buff.ReadDecimal();
                            break;

                        case TypeCode.DBNull:
                            obj[y] = DBNull.Value;
                            break;

                        case TypeCode.DateTime:
                            obj[y] = DateTime.FromBinary(buff.ReadLong());
                            break;

                        default:
                            obj[y] = null;
                            break;
                        }
                    }
                    dt.Rows.Add(obj);
                }

                dt.EndLoadData();

                if (RowCount > 0)
                {
                    dt.AcceptChanges();
                }
            }

            return(dt);
        }
示例#4
0
        public static DataTable ConvertBlobToDataTable(ref byte[] data)
        {
            DataTable dt = null;

            if (data == null || data.Length == 0)
                return dt;

            BinaryBuffer buff = new BinaryBuffer(data);

            buff.BeginRead();

            buff.ReadInt();

            int ColumnCount = buff.ReadInt();

            if (ColumnCount > 0)
            {
                dt = new DataTable();
                TypeCode[] types = new TypeCode[ColumnCount];
                for (int i = 0; i < ColumnCount; i++)
                {
                    string colName = buff.ReadString(buff.ReadInt());
                    TypeCode type = (TypeCode)buff.ReadByte();
                    types[i] = type;

                    switch (type)
                    {
                        case TypeCode.Boolean:
                            dt.Columns.Add(colName, typeof(Boolean));
                            break;
                        case TypeCode.Byte:
                            dt.Columns.Add(colName, typeof(byte));
                            break;
                        case TypeCode.Char:
                            dt.Columns.Add(colName, typeof(char));
                            break;
                        case TypeCode.DateTime:
                            dt.Columns.Add(colName, typeof(DateTime));
                            break;
                        case TypeCode.DBNull:
                            dt.Columns.Add(colName);
                            break;
                        case TypeCode.Decimal:
                            dt.Columns.Add(colName, typeof(decimal));
                            break;
                        case TypeCode.Double:
                            dt.Columns.Add(colName, typeof(double));
                            break;
                        case TypeCode.Empty:
                            dt.Columns.Add(colName);
                            break;
                        case TypeCode.Int16:
                            dt.Columns.Add(colName, typeof(short));
                            break;
                        case TypeCode.Int32:
                            dt.Columns.Add(colName, typeof(int));
                            break;
                        case TypeCode.Int64:
                            dt.Columns.Add(colName, typeof(long));
                            break;
                        case TypeCode.Single:
                            dt.Columns.Add(colName, typeof(float));
                            break;
                        case TypeCode.String:
                            dt.Columns.Add(colName, typeof(string));
                            break;
                        default:
                            dt.Columns.Add(colName);
                            break;
                    }
                }

                int RowCount = buff.ReadInt();

                dt.BeginLoadData();

                for (int i = 0; i < RowCount; i++)
                {
                    //DataRow dr = dt.NewRow();
                    object[] obj = new object[ColumnCount];
                    for (int y = 0; y < ColumnCount; y++)
                    {
                        TypeCode type = (TypeCode)buff.ReadByte();

                        switch (type)
                        {
                            case TypeCode.Byte:
                            case TypeCode.Boolean:
                                obj[y] = buff.ReadByte();
                                break;
                            case TypeCode.String:
                                obj[y] = buff.ReadString(buff.ReadInt());
                                break;
                            case TypeCode.Int16:
                                obj[y] = BitConverter.ToInt16(buff.ReadByteArray(2), 0);
                                break;
                            case TypeCode.Int32:
                                obj[y] = buff.ReadInt();
                                break;
                            case TypeCode.Int64:
                                obj[y] = buff.ReadLong();
                                break;
                            case TypeCode.Single:
                                obj[y] = buff.ReadFloat();
                                break;
                            case TypeCode.Double:
                                obj[y] = BitConverter.ToDouble(buff.ReadByteArray(8), 0);
                                break;
                            case TypeCode.Decimal:
                                obj[y] = buff.ReadDecimal();
                                break;
                            case TypeCode.DBNull:
                                obj[y] = DBNull.Value;
                                break;
                            case TypeCode.DateTime:
                                obj[y] = DateTime.FromBinary(buff.ReadLong());
                                break;
                            default:
                                obj[y] = null;
                                break;
                        }
                    }
                    dt.Rows.Add(obj);
                }

                dt.EndLoadData();

                if (RowCount > 0)
                    dt.AcceptChanges();
            }

            return dt;
        }