Example #1
0
        public override void QueueEvents(RemoteEvent remoteEvent)
        {
            try
            {
                if (_eventManager == null)
                {
                    var(auxHandle, ipAddress, portNumber, timeout) = ConnectionRequest();
                    _eventManager = new GdsEventManager(auxHandle, ipAddress, portNumber, timeout);
                    _eventManager.Open();
                    var dummy = _eventManager.StartWaitingForEvents(remoteEvent);
                }

                remoteEvent.LocalId++;

                var epb     = remoteEvent.BuildEpb();
                var epbData = epb.ToArray();

                Xdr.Write(IscCodes.op_que_events);
                Xdr.Write(_handle);
                Xdr.WriteBuffer(epbData);
                Xdr.Write(AddressOfAstRoutine);
                Xdr.Write(ArgumentToAstRoutine);
                Xdr.Write(remoteEvent.LocalId);

                Xdr.Flush();

                var response = (GenericResponse)ReadResponse();

                remoteEvent.RemoteId = response.ObjectHandle;
            }
            catch (IOException ex)
            {
                throw IscException.ForIOException(ex);
            }
        }
Example #2
0
        public override async ValueTask QueueEventsAsync(RemoteEvent remoteEvent, CancellationToken cancellationToken = default)
        {
            try
            {
                if (_eventManager == null)
                {
                    var(auxHandle, ipAddress, portNumber, timeout) = await ConnectionRequestAsync(cancellationToken).ConfigureAwait(false);

                    _eventManager = new GdsEventManager(auxHandle, ipAddress, portNumber, timeout);
                    await _eventManager.OpenAsync(cancellationToken).ConfigureAwait(false);

                    var dummy = _eventManager.StartWaitingForEvents(remoteEvent);
                }

                remoteEvent.LocalId++;

                var epb     = remoteEvent.BuildEpb();
                var epbData = epb.ToArray();

                await Xdr.WriteAsync(IscCodes.op_que_events, cancellationToken).ConfigureAwait(false);

                await Xdr.WriteAsync(_handle, cancellationToken).ConfigureAwait(false);

                await Xdr.WriteBufferAsync(epbData, cancellationToken).ConfigureAwait(false);

                await Xdr.WriteAsync(AddressOfAstRoutine, cancellationToken).ConfigureAwait(false);

                await Xdr.WriteAsync(ArgumentToAstRoutine, cancellationToken).ConfigureAwait(false);

                await Xdr.WriteAsync(remoteEvent.LocalId, cancellationToken).ConfigureAwait(false);

                await Xdr.FlushAsync(cancellationToken).ConfigureAwait(false);

                var response = (GenericResponse) await ReadResponseAsync(cancellationToken).ConfigureAwait(false);

                remoteEvent.RemoteId = response.ObjectHandle;
            }
            catch (IOException ex)
            {
                throw IscException.ForIOException(ex);
            }
        }