// Objective-C API for talking to github.com/wpajqz/linker/export Go package.
//   gobind -lang=objc github.com/wpajqz/linker/export
//
// File is generated by gobind. Do not edit.

#ifndef __Export_H__
#define __Export_H__

@import Foundation;
#include "Universe.objc.h"


@class ExportClient;
@protocol ExportHandler;
@class ExportHandler;
@protocol ExportReadyStateCallback;
@class ExportReadyStateCallback;
@protocol ExportRequestStatusCallback;
@class ExportRequestStatusCallback;

@protocol ExportHandler <NSObject>
- (void)handle:(NSData*)header body:(NSData*)body;
@end

@protocol ExportReadyStateCallback <NSObject>
- (void)onClose;
- (void)onError:(NSString*)err;
- (void)onOpen;
@end

@protocol ExportRequestStatusCallback <NSObject>
- (void)onEnd;
- (void)onError:(long)status message:(NSString*)message;
- (void)onStart;
- (void)onSuccess:(NSData*)header body:(NSData*)body;
@end

@interface ExportClient : NSObject <goSeqRefInterface> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (instancetype)init:(NSString*)server port:(long)port readyStateCallback:(id<ExportReadyStateCallback>)readyStateCallback;
/**
 * 添加事件监听器
 */
- (void)addMessageListener:(NSString*)listener callback:(id<ExportHandler>)callback;
/**
 * 向服务端发送请求，异步处理服务端返回结果
 */
- (BOOL)asyncSend:(NSString*)operator param:(NSData*)param callback:(id<ExportRequestStatusCallback>)callback error:(NSError**)error;
/**
 * 获取链接运行状态
 */
- (long)getReadyState;
/**
 * 获取请求属性
 */
- (NSString*)getRequestProperty:(NSString*)key;
/**
 * 获取响应属性
 */
- (NSString*)getResponseProperty:(NSString*)key;
/**
 * 心跳处理，客户端与服务端保持长连接
 */
- (BOOL)ping:(int64_t)interval param:(NSData*)param callback:(id<ExportRequestStatusCallback>)callback error:(NSError**)error;
/**
 * 移除事件监听器
 */
- (void)removeMessageListener:(NSString*)listener;
/**
 * 设置可处理的数据包的最大长度
 */
- (void)setMaxPayload:(int32_t)maxPayload;
/**
 * 设置请求属性
 */
- (void)setRequestProperty:(NSString*)key value:(NSString*)value;
/**
 * 设置响应属性
 */
- (void)setResponseProperty:(NSString*)key value:(NSString*)value;
/**
 * 设置断线重连的间隔时间, 单位s
 */
- (void)setRetryInterval:(long)interval;
/**
 * 设置服务端默认超时时间, 单位s
 */
- (void)setTimeout:(long)timeout;
/**
 * 向服务端发送请求，同步处理服务端返回结果
 */
- (BOOL)syncSend:(NSString*)operator param:(NSData*)param callback:(id<ExportRequestStatusCallback>)callback error:(NSError**)error;
@end

FOUNDATION_EXPORT const int64_t ExportCLOSED;
FOUNDATION_EXPORT const int64_t ExportCLOSING;
FOUNDATION_EXPORT const int64_t ExportCONNECTING;
FOUNDATION_EXPORT const int64_t ExportMaxPayload;
FOUNDATION_EXPORT const int64_t ExportOPEN;
FOUNDATION_EXPORT NSString* const ExportVersion;

FOUNDATION_EXPORT ExportClient* ExportNewClient(NSString* server, long port, id<ExportReadyStateCallback> readyStateCallback);

@class ExportHandler;

@class ExportReadyStateCallback;

@class ExportRequestStatusCallback;

@interface ExportHandler : NSObject <goSeqRefInterface, ExportHandler> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)handle:(NSData*)header body:(NSData*)body;
@end

@interface ExportReadyStateCallback : NSObject <goSeqRefInterface, ExportReadyStateCallback> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)onClose;
- (void)onError:(NSString*)err;
- (void)onOpen;
@end

@interface ExportRequestStatusCallback : NSObject <goSeqRefInterface, ExportRequestStatusCallback> {
}
@property(strong, readonly) id _ref;

- (instancetype)initWithRef:(id)ref;
- (void)onEnd;
- (void)onError:(long)status message:(NSString*)message;
- (void)onStart;
- (void)onSuccess:(NSData*)header body:(NSData*)body;
@end

#endif
