| // |
| // Copyright 2019 Google LLC. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #import <Foundation/Foundation.h> |
| |
| #import "Channel/Sources/EDOChannel.h" |
| |
| NS_ASSUME_NONNULL_BEGIN |
| |
| @class EDOSocket; |
| |
| /** |
| * The channel implemented using dispatch I/O. |
| * |
| * It uses dispatch I/O API to process the non-blocking I/O operations. The channel manages a |
| * header frame to ensure the integrity of each data block received. If two consecutive receiving |
| * blocks are scheduled at once, it may interrupt how the channel interpret the header frame. The |
| * caller shall schedule another receiving callback only after the previous one is completed. |
| * |
| * TODO(haowoo): Rename this to EDODispatchChannel as it is a wrapper around dispatch_io_t. |
| */ |
| @interface EDOSocketChannel : NSObject <EDOChannel> |
| |
| /** |
| * Initializes a channel with the established socket. |
| * |
| * @param socket The established socket from the @c EDOSocketConnectedBlock callback. |
| * @return An instance of @c EDOSocketChannel on success; @c nil if the @c socket is invalid. |
| */ |
| + (nullable instancetype)channelWithSocket:(EDOSocket *)socket; |
| |
| /** |
| * Initializes a channel with the established socket and a handler queue. |
| * |
| * @param socket The established socket from the @c EDOSocketConnectedBlock callback. |
| * @param handlerQueue The queue on which the channel handlers for sending and receiving data will |
| * be dispatched. |
| * |
| * @return An instance of @c EDOSocketChannel on success; @c nil if the @c socket is invalid. |
| */ |
| + (nullable instancetype)channelWithSocket:(EDOSocket *)socket |
| handlerQueue:(dispatch_queue_t _Nullable)handlerQueue; |
| |
| /** |
| * Initializes a channel with the given dispatch I/O channel. |
| * |
| * @param channel The established channel. |
| * @return An instance of @c EDOSocketChannel. |
| */ |
| - (instancetype)initWithDispatchIO:(dispatch_io_t)channel; |
| |
| @end |
| |
| NS_ASSUME_NONNULL_END |