File: main.c

package info (click to toggle)
librnd 4.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,812 kB
  • sloc: ansic: 126,990; sh: 2,602; makefile: 2,145; awk: 7
file content (103 lines) | stat: -rw-r--r-- 2,156 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include "libuirc.h"

static int on_rawin(uirc_t *ctx, char *from, char *cmd, char *arg)
{
	if (strcmp(cmd, "353") == 0)
		printf("### chan names: %s\n", arg);
	return 0;
}


static void on_me_part(uirc_t *ctx, int query, char *chan)
{
	printf("### me left channel %s\n", chan);
}

static void on_me_join(uirc_t *ctx, int query, char *chan)
{
	printf("### me joined channel %s\n", chan);
}

static void on_msg(uirc_t *ctx, char *from, int query, char *to, char *text)
{
	printf("(msg:%s) <%s> %s\n", to, from, text);
}

static void on_notice(uirc_t *ctx, char *from, int query, char *to, char *text)
{
	printf("(msg:%s) -%s- %s\n", to, from, text);
}


static void on_topic(uirc_t *ctx, char *from, int query, char *to, char *text)
{
	printf("(by:%s) [%s] topic=%s\n", from, to, text);
}

static void on_kick(uirc_t *ctx, char *nick, int query, char *chan, char *victim, char *reason)
{
	printf("(kick: %s kick %s from %s reason=%s\n", nick, victim, chan, reason);
}


static void read_stdin(uirc_t *ctx)
{
	struct P_pollfd fds[1];

	fds[0].fd = 0;
	fds[0].events = P_POLLIN;

	if (P_poll(fds, 1, 0) == 1) {
		char line[600];
		fgets(line, sizeof(line), stdin);
		if (*line == '/') {
			uirc_raw(ctx, line+1);
		}
		else {
			if (ctx->query[ctx->curr_query].name != NULL)
				uirc_privmsg(ctx, ctx->query[ctx->curr_query].name, line);
		}
	}
}

int main()
{
	uirc_t irc;

	memset(&irc, 0, sizeof(irc));
	irc.on_rawin = on_rawin;
	irc.on_me_part = on_me_part;
	irc.on_me_join = on_me_join;
	irc.on_msg = on_msg;
	irc.on_notice = on_notice;
	irc.on_topic = on_topic;
	irc.on_kick = on_kick;


	irc.nick = strdup("libuirc");
	if (uirc_connect(&irc, "10.0.0.2", 6667, "libuirc test client") != 0) {
		printf("Failed to connect.\n");
		return 1;
	}

	for(;irc.alive;) {
		uirc_event_t ev = uirc_poll(&irc, NULL);
		if (ev & UIRC_CONNECT) {
			printf("joining\n");
			uirc_raw(&irc, "join :#dev");
		}
		if (ev & UIRC_QUERY_BEGIN) {
			irc.curr_query = irc.last_new_query;
			printf("### begin query with %s\n", irc.query[irc.curr_query].name);
		}

		read_stdin(&irc);
		usleep(100);
	}
	
	return 0;
}