extras; samples: Fixed warnings
[sdk] / samples / net / eirc / eIRC.ec
1 import "ecere"
2 import "console"
3
4 static IRCSocket ircSocket { };
5 static Console console
6 {
7    text = "Ecere IRC Client";
8    hasClose = true;
9    hasMaximize = true;
10    hasMinimize = true;
11    borderStyle = sizable;
12    anchor = { 0, 0, 0, 0 };
13    background = black;
14
15    alpha = 255;
16    logTextColor = white;
17    editTextColor = white;
18    editHeight = 16;
19    // height = 480;
20    referenceHeight = 480;
21
22    bool ProcessCommand(const char * command)
23    {
24       bool result = false;
25       char *tokens[10];
26       int count = Tokenize((char *)command, 10, tokens, false);
27
28
29       // ==== OFFLINE ====
30
31       // Exit
32       if(!strcmp(tokens[0], "/exit"))
33       {
34          ((GuiApplication)__thisModule).desktop.Destroy(0);
35          result = true;
36       }
37
38       // Server
39       else if(!strcmp(tokens[0], "/server"))
40       {
41          if(count > 1)
42          {
43             //ircSocket = eSocket_Connect("paris.fr.eu.undernet.org", 6667, OnConnect, null);
44             //ircSocket = eSocket_Connect("irc2.magic.ca", 6667, OnConnect, null);
45             ircSocket.Connect(tokens[1], 6667);
46          }
47       }
48
49       // ==== ONLINE ====
50       else if(ircSocket)
51       {
52          char sendbuf[1024];
53
54          // nick
55          if(!strcmpi(tokens[0], "/nick"))
56          {
57             ircSocket.Sendf( "NICK %s\n", tokens[1]);
58             ircSocket.Sendf("USER %s %s %s %s\n", tokens[1], tokens[1], tokens[1], tokens[1]);
59          }
60
61          // msg
62          else if(!strcmpi(tokens[0], "/msg"))
63          {
64             int c;
65             sprintf(sendbuf, "PRIVMSG %s :", tokens[1]);
66             for(c = 2; c<count; c++)
67             {
68                strcat(sendbuf, " ");
69                strcat(sendbuf, tokens[c]);
70             }
71             strcat(sendbuf, "\n");
72             ircSocket.SendString(sendbuf);
73          }
74
75          // quit
76          else if(!strcmpi(tokens[0], "/quit"))
77          {
78             int c;
79             strcpy(sendbuf, "QUIT :");
80             for(c = 1; c<count; c++)
81             {
82                strcat(sendbuf, " ");
83                strcat(sendbuf, tokens[c]);
84             }
85             strcat(sendbuf, "\n");
86             ircSocket.SendString(sendbuf);
87          }
88
89          // join or j
90          else if(!strcmpi(tokens[0], "/join") || !strcmp(tokens[0], "/j"))
91          {
92             if (count > 1)
93             {
94                strcpy(sendbuf, "JOIN ");
95                if (tokens[1][0] != '#' && tokens[1][0] != '&')
96                {
97                   strcat(sendbuf, "#");
98                }
99                strcat(sendbuf, tokens[1]);
100             }
101             strcat(sendbuf, "\n");
102             ircSocket.SendString(sendbuf);
103          }
104
105          // AUTRE
106          else
107          {
108             int c;
109             strcpy(sendbuf, tokens[0]);
110             for(c = 1; c<count; c++)
111             {
112                strcat(sendbuf, " ");
113                strcat(sendbuf, tokens[c]);
114             }
115             strcat(sendbuf, "\n");
116             ircSocket.SendString(sendbuf);
117          }
118       }
119       return result;
120    }
121 };
122
123 static const char * const_NickName = "[User1491]";
124
125 class IRCSocket : Socket
126 {
127    uint OnReceive(const byte * recvBuffer, uint recvCount)
128    {
129       int count;
130       char buffer[513];
131       char *tokens[10];
132
133       count = Min(recvCount, 512);
134       memcpy(buffer, recvBuffer, count);
135       buffer[count] = 0;
136
137       // console.Log("\n");
138       console.Log(buffer);
139
140
141    /*   // Auto connect login Script
142       if(!strcmpi(buffer, "NOTICE AUTH :*** Got ident response"))
143       {
144          ircSocket.Sendf("NICK %s\n", const_NickName );
145          ircSocket.Sendf("USER %s %s %s %s\n", const_NickName , const_NickName, const_NickName , const_NickName );
146       }
147
148       else*/ if(Tokenize(buffer, 10, tokens, false))
149       {
150          // ping
151          if(!strcmp(tokens[0], "PING"))
152          {
153             Sendf("PONG %s", tokens[1]);
154          }
155
156       }
157       return count;
158    }
159
160    void OnDisconnect(int code)
161    {
162       ircSocket = null;
163    }
164
165    void OnConnect()
166    {
167       ircSocket.Sendf("NICK %s\n", const_NickName );
168       ircSocket.Sendf("USER %s %s %s %s\n", const_NickName, const_NickName, const_NickName , const_NickName );
169
170    }
171 }
172
173 class IdentSocket : Socket
174 {
175    uint OnReceive(const byte * recvBuffer, uint recvCount)
176    {
177       int count;
178       char buffer[1024];
179       count = Min(recvCount, 1023);
180       memcpy(buffer, recvBuffer, count);
181       if(count > 1)
182       {
183          buffer[count-2] = 0;
184          console.Log("\nIDENT:");
185          console.Log(buffer);
186          Sendf("%s : USERID : OTHER : jerome\n", buffer);
187       }
188       return count;
189    }
190 }
191
192 class IdentService : Service
193 {
194    port = 113;
195    void OnAccept()
196    {
197       IdentSocket { this };
198    }
199 }
200
201 static IdentService identService { };
202
203 class IRCApp : GuiApplication
204 {
205    bool Init()
206    {
207       identService.Start();
208       return true;
209    }
210 }