Exemple #1
0
        public void SendRequest(DsiCommand command, byte[] payload, AfpTransportReplyHandler replyHandler = null)
        {
            DsiHeader header = new DsiHeader()
            {
                command   = command,
                flags     = DsiFlags.Request,
                requestId = this.NextRequestId(),
                errorCodeOrWriteOffset = 0,
                totalDataLength        = (uint)payload.Length
            };

            AfpStream stream = new AfpStream();

            header.Write(stream);
            stream.WriteBytes(payload);

            if (replyHandler != null)
            {
                _replyHandlers[header.requestId] = replyHandler;
            }

            byte[] result = stream.ToByteArray();

            this.SendBuffer(result);
        }
Exemple #2
0
        private void OnCommandReceived(DsiHeader header, byte[] payload)
        {
            if (header.flags == DsiFlags.Reply)
            {
                // Find reply handler.
                AfpTransportReplyHandler handler = null;

                if (!_replyHandlers.TryRemove(header.requestId, out handler))
                {
                    // BUG? Request ID flipped in replies from Mac OS X Snow Leopard?
                    byte[] requestIdData = BitConverter.GetBytes(header.requestId);
                    Array.Reverse(requestIdData);
                    header.requestId = BitConverter.ToUInt16(requestIdData, 0);

                    _replyHandlers.TryRemove(header.requestId, out handler);
                }

                if (handler != null)
                {
                    try {
                        handler(header, payload);
                    } catch { }

                    return;
                }
            }

            switch (header.command)
            {
            case DsiCommand.Tickle:

                break;

            default: {
                AfpTransportCommandReceivedEventArgs args = new AfpTransportCommandReceivedEventArgs(header, payload);
                try {
                    CommandReceived(this, args);
                } catch { }

                break;
            }
            }
        }
Exemple #3
0
        public void SendRequest(DsiCommand command, byte[] payload, AfpTransportReplyHandler replyHandler = null) {
            DsiHeader header = new DsiHeader() {
                command = command,
                flags = DsiFlags.Request,
                requestId = this.NextRequestId(),
                errorCodeOrWriteOffset = 0,
                totalDataLength = (uint)payload.Length
            };

            AfpStream stream = new AfpStream();
            header.Write(stream);
            stream.WriteBytes(payload);

            if (replyHandler != null) {
                _replyHandlers[header.requestId] = replyHandler;
            }

            byte[] result = stream.ToByteArray();

            this.SendBuffer(result);
        }