예제 #1
0
        //
        // Write a object instance to data output stream
        //
        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
        {
            DataArrayResponse info = (DataArrayResponse)o;

            base.LooseMarshal(wireFormat, o, dataOut);
            LooseMarshalObjectArray(wireFormat, info.Data, dataOut);
        }
        private async Task <XATransactionId[]> TryRecoverBrokerTXIdsAsync()
        {
            Tracer.Debug("Checking for Recoverable Transactions on Broker.");

            TransactionInfo info = new TransactionInfo();

            info.ConnectionId = this.session.Connection.ConnectionId;
            info.Type         = (int)TransactionType.Recover;

            await this.connection.CheckConnectedAsync().Await();

            DataArrayResponse response = await this.connection.SyncRequestAsync(info).Await() as DataArrayResponse;

            if (response != null && response.Data.Length > 0)
            {
                Tracer.DebugFormat("Broker reports there are {0} recoverable XA Transactions", response.Data.Length);

                List <XATransactionId> recovered = new List <XATransactionId>();

                foreach (DataStructure ds in response.Data)
                {
                    XATransactionId xid = ds as XATransactionId;
                    if (xid != null)
                    {
                        recovered.Add(xid);
                    }
                }

                return(recovered.ToArray());
            }

            return(new XATransactionId[0]);
        }
예제 #3
0
        //
        // Write a object instance to data output stream
        //
        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
        {
            base.TightMarshal2(wireFormat, o, dataOut, bs);

            DataArrayResponse info = (DataArrayResponse)o;

            TightMarshalObjectArray2(wireFormat, info.Data, dataOut, bs);
        }
예제 #4
0
        //
        // Write the booleans that this object uses to a BooleanStream
        //
        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
        {
            DataArrayResponse info = (DataArrayResponse)o;

            int rc = base.TightMarshal1(wireFormat, o, bs);

            rc += TightMarshalObjectArray1(wireFormat, info.Data, bs);

            return(rc + 0);
        }
예제 #5
0
        //
        // Un-marshal an object instance from the data input stream
        //
        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs)
        {
            base.TightUnmarshal(wireFormat, o, dataIn, bs);

            DataArrayResponse info = (DataArrayResponse)o;

            if (bs.ReadBoolean())
            {
                short           size  = dataIn.ReadInt16();
                DataStructure[] value = new DataStructure[size];
                for (int i = 0; i < size; i++)
                {
                    value[i] = (DataStructure)TightUnmarshalNestedObject(wireFormat, dataIn, bs);
                }
                info.Data = value;
            }
            else
            {
                info.Data = null;
            }
        }