/*
 * rpc_conn.h
 *
 *  Created on: 2011-3-20
 *      Author: yanghu
 */

#ifndef RPC_CONN_H_
#define RPC_CONN_H_

#include "rpc_common.h"
#include "ev.h"

struct _rpc_conn {
	int sfd;
	int curr_seq;
	struct ev_loop *loop;
	struct ev_io watcher;

	char *rbuf;
	char *rcurr;
	int rsize;
	int rbytes;

	struct iovec *iov;
	int iovsize;
	int iovused;

	void *unprocess_data;//unprocess data
	void *thread;//belong to thread
};

rpc_conn *rpc_conn_new(int fd, struct ev_loop* l);

rpc_conn *rpc_conn_client_new(int fd, struct ev_loop *l);

void rpc_conn_addiov(rpc_conn *c, pointer data, size_t data_len);

void rpc_send_message(rpc_conn *conn);

void rpc_conn_close(rpc_conn *c);

void rpc_return(rpc_conn *conn, pointer output, int output_len);

void rpc_return_null(rpc_conn *conn);

void rpc_return_error(rpc_conn *conn, ret_code err_code, char* err_message);

void rpc_send_message(rpc_conn *conn);

#endif /* RPC_CONN_H_ */