2 * $Id: rb_server.c 362 2006-02-13 22:46:35Z tilman $
4 * Copyright (C) 2005 ruby-ecore team (see AUTHORS)
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include <Ecore_Con.h>
27 #include "../ecore/rb_event_handler.h"
29 #define CHECK_DELETED(s) \
31 rb_raise (rb_eIOError, "server deleted");
34 Ecore_Con_Server *real;
38 static void c_free (RbServer *svr)
40 if (svr->real && !svr->deleted)
41 ecore_con_server_del (svr->real);
43 ecore_con_shutdown ();
48 static VALUE c_alloc (VALUE klass)
52 return Data_Make_Struct (klass, RbServer, NULL, c_free, svr);
55 static VALUE c_init (VALUE self, VALUE type, VALUE host, VALUE port)
59 Check_Type (type, T_FIXNUM);
61 Check_Type (port, T_FIXNUM);
63 Data_Get_Struct (self, RbServer, svr);
68 svr->real = ecore_con_server_connect (FIX2INT (type),
69 StringValuePtr (host),
70 FIX2INT (port), (void *) self);
72 rb_raise (rb_eIOError, "cannot create Server");
77 static VALUE c_write (VALUE self, VALUE data)
84 Data_Get_Struct (self, RbServer, svr);
87 n = ecore_con_server_send (svr->real,
88 StringValuePtr (data),
91 rb_raise (rb_eIOError, "couldn't write data");
98 * server.delete => nil
100 * Deletes <i>server</i>.
102 static VALUE c_delete (VALUE self)
104 RbServer *svr = NULL;
106 Data_Get_Struct (self, RbServer, svr);
109 ecore_con_server_del (svr->real);
116 static VALUE find_server (Ecore_Con_Server *c)
118 /* FIXME what if the Ruby object has been destroyed already? */
119 return (VALUE) ecore_con_server_data_get (c);
122 static VALUE c_ev_server_add_init (VALUE self, VALUE event)
124 VALUE c = CLASS_OF (self), server;
125 Ecore_Con_Event_Server_Add *e = (void *) event;
127 server = find_server (e->server);
129 rb_bug ("cannot find server");
131 rb_define_attr (c, "server", 1, 0);
133 rb_iv_set (self, "@server", server);
138 static VALUE c_ev_server_del_init (VALUE self, VALUE event)
140 VALUE c = CLASS_OF (self), server;
141 Ecore_Con_Event_Server_Del *e = (void *) event;
143 server = find_server (e->server);
145 rb_bug ("cannot find server");
147 rb_define_attr (c, "server", 1, 0);
149 rb_iv_set (self, "@server", server);
154 static VALUE c_ev_server_data_init (VALUE self, VALUE event)
156 VALUE c = CLASS_OF (self), server;
157 Ecore_Con_Event_Server_Data *e = (void *) event;
159 server = find_server (e->server);
161 rb_bug ("cannot find server");
163 rb_define_attr (c, "server", 1, 0);
164 rb_define_attr (c, "data", 1, 0);
166 rb_iv_set (self, "@server", server);
167 rb_iv_set (self, "@data", rb_str_new (e->data, e->size));
172 void Init_Server (VALUE m)
174 VALUE c = rb_define_class_under (m, "Server", rb_cObject);
176 rb_define_alloc_func (c, c_alloc);
177 rb_define_method (c, "initialize", c_init, 3);
178 rb_define_method (c, "write", c_write, 1);
179 rb_define_alias (c, "<<", "write");
180 rb_define_method (c, "delete", c_delete, 0);
182 ADD_EVENT (m, ECORE_CON_EVENT_, SERVER_ADD, "ServerAdd", c);
183 rb_define_private_method (c, "initialize",
184 c_ev_server_add_init, 1);
186 ADD_EVENT (m, ECORE_CON_EVENT_, SERVER_DATA, "ServerData", c);
187 rb_define_private_method (c, "initialize",
188 c_ev_server_data_init, 1);
190 ADD_EVENT (m, ECORE_CON_EVENT_, SERVER_DEL, "ServerDel", c);
191 rb_define_private_method (c, "initialize",
192 c_ev_server_del_init, 1);