2 * Copyright (C) 2005 ruby-ecore team (see AUTHORS)
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include <Ecore_Con.h>
25 #include "../ecore/rb_event_handler.h"
27 #define CHECK_DELETED(s) \
29 rb_raise (rb_eIOError, "server deleted");
32 Ecore_Con_Server *real;
36 static void c_free (RbServer *svr)
38 if (svr->real && !svr->deleted)
39 ecore_con_server_del (svr->real);
41 ecore_con_shutdown ();
46 static VALUE c_alloc (VALUE klass)
50 return Data_Make_Struct (klass, RbServer, NULL, c_free, svr);
53 static VALUE c_init (VALUE self, VALUE type, VALUE host, VALUE port)
57 Check_Type (type, T_FIXNUM);
59 Check_Type (port, T_FIXNUM);
61 Data_Get_Struct (self, RbServer, svr);
66 svr->real = ecore_con_server_connect (FIX2INT (type),
67 StringValuePtr (host),
68 FIX2INT (port), (void *) self);
70 rb_raise (rb_eIOError, "cannot create Server");
75 static VALUE c_write (VALUE self, VALUE data)
82 Data_Get_Struct (self, RbServer, svr);
85 n = ecore_con_server_send (svr->real,
86 StringValuePtr (data),
89 rb_raise (rb_eIOError, "couldn't write data");
96 * server.delete => nil
98 * Deletes <i>server</i>.
100 static VALUE c_delete (VALUE self)
102 RbServer *svr = NULL;
104 Data_Get_Struct (self, RbServer, svr);
107 ecore_con_server_del (svr->real);
114 static VALUE find_server (Ecore_Con_Server *c)
116 /* FIXME what if the Ruby object has been destroyed already? */
117 return (VALUE) ecore_con_server_data_get (c);
120 static VALUE c_ev_server_add_init (VALUE self, VALUE event)
122 VALUE c = CLASS_OF (self), server;
123 Ecore_Con_Event_Server_Add *e = (void *) event;
125 server = find_server (e->server);
127 rb_bug ("cannot find server");
129 rb_define_attr (c, "server", 1, 0);
131 rb_iv_set (self, "@server", server);
136 static VALUE c_ev_server_del_init (VALUE self, VALUE event)
138 VALUE c = CLASS_OF (self), server;
139 Ecore_Con_Event_Server_Del *e = (void *) event;
141 server = find_server (e->server);
143 rb_bug ("cannot find server");
145 rb_define_attr (c, "server", 1, 0);
147 rb_iv_set (self, "@server", server);
152 static VALUE c_ev_server_data_init (VALUE self, VALUE event)
154 VALUE c = CLASS_OF (self), server;
155 Ecore_Con_Event_Server_Data *e = (void *) event;
157 server = find_server (e->server);
159 rb_bug ("cannot find server");
161 rb_define_attr (c, "server", 1, 0);
162 rb_define_attr (c, "data", 1, 0);
164 rb_iv_set (self, "@server", server);
165 rb_iv_set (self, "@data", rb_str_new (e->data, e->size));
170 void Init_Server (VALUE m)
172 VALUE c = rb_define_class_under (m, "Server", rb_cObject);
174 rb_define_alloc_func (c, c_alloc);
175 rb_define_method (c, "initialize", c_init, 3);
176 rb_define_method (c, "write", c_write, 1);
177 rb_define_alias (c, "<<", "write");
178 rb_define_method (c, "delete", c_delete, 0);
180 ADD_EVENT (m, ECORE_CON_EVENT_SERVER_ADD, "ServerAddEvent", c);
181 rb_define_private_method (c, "initialize",
182 c_ev_server_add_init, 1);
184 ADD_EVENT (m, ECORE_CON_EVENT_SERVER_DATA, "ServerDataEvent", c);
185 rb_define_private_method (c, "initialize",
186 c_ev_server_data_init, 1);
188 ADD_EVENT (m, ECORE_CON_EVENT_SERVER_DEL, "ServerDelEvent", c);
189 rb_define_private_method (c, "initialize",
190 c_ev_server_del_init, 1);