1
0
mirror of https://github.com/haiwen/ccnet-server.git synced 2025-04-27 18:25:06 +00:00
ccnet-server/include/ccnet/ccnet-client.h
2016-08-19 13:54:34 +08:00

194 lines
5.6 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#ifndef CCNET_CLIENT_SESSION_H
#define CCNET_CLIENT_SESSION_H
#define SESSION_ID_LENGTH 40
#include <glib.h>
#include <glib-object.h>
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
#include <event2/util.h>
#else
#include <evutil.h>
#endif
#include "ccnet-session-base.h"
#define CCNET_TYPE_CLIENT (ccnet_client_get_type ())
#define CCNET_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CCNET_TYPE_CLIENT, CcnetClient))
#define CCNET_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CCNET_TYPE_CLIENT))
#define CCNET_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CCNET_TYPE_CLIENT, CcnetClientClass))
#define CCNET_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CCNET_TYPE_CLIENT))
#define CCNET_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CCNET_TYPE_CLIENT, CcnetClientClass))
typedef struct _CcnetClient CcnetClient;
typedef struct _CcnetClientClass CcnetClientClass;
struct _CcnetPeer;
struct _CcnetUser;
struct _CcnetProcessor;
struct CcnetPacketIO;
#include <ccnet/message.h>
#include <ccnet/processor.h>
#define SESSION_CONFIG_FILENAME "ccnet.conf"
#define CCNET_USER_ID_START 1000
/**
* CcnetClientMode:
* @CCNET_CLIENT_SYNC: Synchronous mode
* @CCNET_CLIENT_ASYNC: Asynchronous mode
*
* #CcnetClient can run in synchronous or asynchronous mode. In
* synchronous mode, every function call to #CcnetClient is blocked
* until the ccnet daemon returns. In asynchronous mode, function
* calls are not blocked, and the user should use the processor
* mechanism to interact with the daemon.
*
**/
typedef enum {
CCNET_CLIENT_SYNC,
CCNET_CLIENT_ASYNC
} CcnetClientMode;
struct CcnetResponse {
char *code;
char *code_msg;
char *content;
int clen; /* content length */
};
typedef struct CcnetClientPriv CcnetClientPriv;
/**
* CcnetClient:
* @id: The ccnet ID in plain text, including the ending '\0'
* @id_sha1: The ccnet ID in binary.
* @id_quark: The ccnet ID in GQuark.
* @name: Ccnet name
* @mode: See #CcnetClientMode
*/
struct _CcnetClient
{
CcnetSessionBase base;
/*< public >*/
int mode;
char *central_config_dir;
char *config_dir;
char *config_file;
int daemon_port;
char *un_path;
int connected : 1;
struct _CcnetProcFactory *proc_factory;
struct _CcnetGroupManager *group_mgr;
/* For processor threads. */
struct _CcnetJobManager *job_mgr;
struct CcnetResponse response;
/*< private >*/
evutil_socket_t connfd;
uint32_t req_id; /* the current request id */
struct CcnetPacketIO *io;
GHashTable *processors;
GList *rpc_pool;
CcnetClientPriv *priv;
};
struct _CcnetClientClass
{
CcnetSessionBaseClass parent_class;
};
GType ccnet_client_get_type (void);
CcnetClient* ccnet_client_new (void);
int ccnet_client_load_confdir (CcnetClient *client, const char *central_config_dir, const char *confdir);
/*
void ccnet_client_add_alias (CcnetClient *client, const char *alias_str);
void ccnet_client_del_alias (CcnetClient *client, const char *alias_str);
gboolean ccnet_client_has_alias (CcnetClient *client, const char *alias_id);
*/
int ccnet_client_connect_daemon (CcnetClient *client, CcnetClientMode mode);
int ccnet_client_disconnect_daemon (CcnetClient *client);
uint32_t ccnet_client_get_request_id (CcnetClient *client);
/* async mode */
void ccnet_client_run_synchronizer (CcnetClient *client);
void ccnet_client_add_processor (CcnetClient *client,
CcnetProcessor *processor);
void ccnet_client_remove_processor (CcnetClient *client,
CcnetProcessor *processor);
CcnetProcessor *
ccnet_client_get_processor (CcnetClient *client, int id);
int ccnet_client_read_input (CcnetClient *client);
/* sync mode */
int ccnet_client_read_response (CcnetClient *client);
void ccnet_client_send_request (CcnetClient *client,
int req_id, const char *req);
void ccnet_client_send_update (CcnetClient *client, int req_id,
const char *code, const char *reason,
const char *content, int clen);
void ccnet_client_send_response (CcnetClient *client, int req_id,
const char *code, const char *reason,
const char *content, int clen);
const char *ccnet_client_send_cmd (CcnetClient *client,
const char *cmd, GError **error);
int ccnet_client_send_message (CcnetClient *client,
CcnetMessage *message);
/* For a sync client to receive a given type of message,
1. call ccnet_client_prepare_recv_message() with the message type you want to receive
2. call ccnet_client_receive_message() repeatly
*/
int
ccnet_client_prepare_recv_message (CcnetClient *client,
const char *app);
CcnetMessage *
ccnet_client_receive_message (CcnetClient *client);
uint32_t
ccnet_client_get_rpc_request_id (CcnetClient *client, const char *peer_id,
const char *service);
void
ccnet_client_clean_rpc_request (CcnetClient *client, uint32_t req_id);
/* void ccnet_client_send_event (CcnetClient *client, GObject *event); */
#endif