ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.76 by root, Wed Dec 13 02:55:51 2006 UTC vs.
Revision 1.79 by root, Thu Dec 14 05:09:32 2006 UTC

136inline SV *to_sv (unsigned long v) { return newSVuv (v); } 136inline SV *to_sv (unsigned long v) { return newSVuv (v); }
137inline SV *to_sv ( signed long long v) { return newSVval64 (v); } 137inline SV *to_sv ( signed long long v) { return newSVval64 (v); }
138inline SV *to_sv (unsigned long long v) { return newSVval64 (v); } 138inline SV *to_sv (unsigned long long v) { return newSVval64 (v); }
139inline SV *to_sv (float v) { return newSVnv (v); } 139inline SV *to_sv (float v) { return newSVnv (v); }
140inline SV *to_sv (double v) { return newSVnv (v); } 140inline SV *to_sv (double v) { return newSVnv (v); }
141inline SV *to_sv (client_socket *v) { return newSVattachable (v, "cf::client_socket::wrap"); }
141inline SV *to_sv (player * v) { return newSVattachable (v, "cf::player::wrap"); } 142inline SV *to_sv (player * v) { return newSVattachable (v, "cf::player::wrap"); }
142inline SV *to_sv (object * v) { return newSVattachable (v, v && v->type == PLAYER ? "cf::object::player::wrap" : "cf::object::wrap"); } 143inline SV *to_sv (object * v) { return newSVattachable (v, v && v->type == PLAYER ? "cf::object::player::wrap" : "cf::object::wrap"); }
143inline SV *to_sv (maptile * v) { return newSVattachable (v, "cf::map::wrap"); } 144inline SV *to_sv (maptile * v) { return newSVattachable (v, "cf::map::wrap"); }
144inline SV *to_sv (archetype * v) { return newSVptr (v, "cf::arch::wrap"); } 145inline SV *to_sv (archetype * v) { return newSVptr (v, "cf::arch::wrap"); }
145inline SV *to_sv (partylist * v) { return newSVptr (v, "cf::party::wrap"); } 146inline SV *to_sv (partylist * v) { return newSVptr (v, "cf::party::wrap"); }
173inline void sv_to (SV *sv, unsigned long &v) { v = SvUV (sv); } 174inline void sv_to (SV *sv, unsigned long &v) { v = SvUV (sv); }
174inline void sv_to (SV *sv, signed long long &v) { v = ( signed long long)SvVAL64 (sv); } 175inline void sv_to (SV *sv, signed long long &v) { v = ( signed long long)SvVAL64 (sv); }
175inline void sv_to (SV *sv, unsigned long long &v) { v = (unsigned long long)SvVAL64 (sv); } 176inline void sv_to (SV *sv, unsigned long long &v) { v = (unsigned long long)SvVAL64 (sv); }
176inline void sv_to (SV *sv, float &v) { v = SvNV (sv); } 177inline void sv_to (SV *sv, float &v) { v = SvNV (sv); }
177inline void sv_to (SV *sv, double &v) { v = SvNV (sv); } 178inline void sv_to (SV *sv, double &v) { v = SvNV (sv); }
179inline void sv_to (SV *sv, client_socket *&v) { v = (client_socket *)SvPTR_ornull (sv, "cf::client_socket"); }
178inline void sv_to (SV *sv, player * &v) { v = (player *)SvPTR_ornull (sv, "cf::player"); } 180inline void sv_to (SV *sv, player * &v) { v = (player *)SvPTR_ornull (sv, "cf::player"); }
179inline void sv_to (SV *sv, object * &v) { v = (object *)SvPTR_ornull (sv, "cf::object"); } 181inline void sv_to (SV *sv, object * &v) { v = (object *)SvPTR_ornull (sv, "cf::object"); }
180inline void sv_to (SV *sv, archetype * &v) { v = (archetype *)SvPTR_ornull (sv, "cf::arch"); } 182inline void sv_to (SV *sv, archetype * &v) { v = (archetype *)SvPTR_ornull (sv, "cf::arch"); }
181inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)SvPTR_ornull (sv, "cf::map"); } 183inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)SvPTR_ornull (sv, "cf::map"); }
182inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } 184inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); }
239 break; 241 break;
240 242
241 case DT_MAP: 243 case DT_MAP:
242 // va_arg (object *) when void * is passed is an XSI extension 244 // va_arg (object *) when void * is passed is an XSI extension
243 sv = to_sv (va_arg (ap, maptile *)); 245 sv = to_sv (va_arg (ap, maptile *));
246 break;
247
248 case DT_SOCKET:
249 sv = to_sv (va_arg (ap, client_socket *));
244 break; 250 break;
245 251
246 case DT_PLAYER: 252 case DT_PLAYER:
247 sv = to_sv (va_arg (ap, player *)); 253 sv = to_sv (va_arg (ap, player *));
248 break; 254 break;
309} 315}
310 316
311////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 317//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
312 318
313SV * 319SV *
314registry_of (attachable_base *ext) 320registry (attachable_base *ext)
315{ 321{
316 if (!ext->cb) 322 if (!ext->cb)
317 ext->cb = newAV (); 323 ext->cb = newAV ();
318 324
319 return newRV_inc ((SV *)ext->cb); 325 return newRV_inc ((SV *)ext->cb);
1600 1606
1601 for (object *op = object::first; op; op = op->next) 1607 for (object *op = object::first; op; op = op->next)
1602 reattach (op); 1608 reattach (op);
1603} 1609}
1604 1610
1611bool
1612add_client_socket (int fd, const char *peername)
1613
1605NV floor (NV x) 1614NV floor (NV x)
1606 1615
1607NV ceil (NV x) 1616NV ceil (NV x)
1608 1617
1609void server_tick () 1618void server_tick ()
1730 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); 1739 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i)));
1731 RETVAL = INVOKE_((event_type)event, ARG_OBJECT (op), ARG_AV (av)); 1740 RETVAL = INVOKE_((event_type)event, ARG_OBJECT (op), ARG_AV (av));
1732 OUTPUT: RETVAL 1741 OUTPUT: RETVAL
1733 1742
1734SV *registry (object *op) 1743SV *registry (object *op)
1735 CODE:
1736 RETVAL = registry_of (op);
1737 OUTPUT:
1738 RETVAL
1739 1744
1740void mortals () 1745void mortals ()
1741 PPCODE: 1746 PPCODE:
1742 EXTEND (SP, object::mortals.size ()); 1747 EXTEND (SP, object::mortals.size ());
1743 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i) 1748 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
2031int command_banish (object *op, char *params) 2036int command_banish (object *op, char *params)
2032 2037
2033 2038
2034MODULE = cf PACKAGE = cf::player PREFIX = cf_player_ 2039MODULE = cf PACKAGE = cf::player PREFIX = cf_player_
2035 2040
2036INCLUDE: $PERL genacc player ../include/newserver.h ../include/player.h | 2041INCLUDE: $PERL genacc player ../include/player.h |
2037 2042
2038char * 2043char *
2039client (player *pl) 2044client (player *pl)
2040 CODE: 2045 CODE:
2041 RETVAL = pl->socket.client; 2046 RETVAL = pl->socket->client;
2042 OUTPUT: 2047 OUTPUT:
2043 RETVAL 2048 RETVAL
2044 2049
2045char * 2050char *
2046host (player *pl) 2051host (player *pl)
2047 CODE: 2052 CODE:
2048 RETVAL = pl->socket.host; 2053 RETVAL = pl->socket->host;
2049 OUTPUT: 2054 OUTPUT:
2050 RETVAL 2055 RETVAL
2051 2056
2052int invoke (player *pl, int event, ...) 2057int invoke (player *pl, int event, ...)
2053 CODE: 2058 CODE:
2056 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); 2061 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i)));
2057 RETVAL = INVOKE_((event_type)event, ARG_PLAYER (pl), ARG_AV (av)); 2062 RETVAL = INVOKE_((event_type)event, ARG_PLAYER (pl), ARG_AV (av));
2058 OUTPUT: RETVAL 2063 OUTPUT: RETVAL
2059 2064
2060SV *registry (player *pl) 2065SV *registry (player *pl)
2066
2067player *cf_player_find (char *name)
2068 PROTOTYPE: $
2069
2070void cf_player_move (player *pl, int dir)
2071
2072void play_sound_player_only (player *pl, int soundnum, int x = 0, int y = 0);
2073
2074player *first ()
2061 CODE: 2075 CODE:
2062 RETVAL = registry_of (pl); 2076 RETVAL = first_player;
2077 OUTPUT: RETVAL
2078
2079player *next (player *pl)
2080 CODE:
2081 RETVAL = pl->next;
2082 OUTPUT: RETVAL
2083
2084bool
2085cell_visible (player *pl, int dx, int dy)
2086 CODE:
2087 RETVAL = FABS (dx) <= pl->socket->mapx / 2 && FABS (dy) <= pl->socket->mapy / 2
2088 && !pl->blocked_los [dx + pl->socket->mapx / 2][dy + pl->socket->mapy / 2];
2063 OUTPUT: 2089 OUTPUT:
2064 RETVAL 2090 RETVAL
2065 2091
2066player *cf_player_find (char *name)
2067 PROTOTYPE: $
2068
2069void cf_player_move (player *pl, int dir)
2070
2071void play_sound_player_only (player *pl, int soundnum, int x = 0, int y = 0);
2072
2073player *first ()
2074 CODE:
2075 RETVAL = first_player;
2076 OUTPUT: RETVAL
2077
2078player *next (player *pl)
2079 CODE:
2080 RETVAL = pl->next;
2081 OUTPUT: RETVAL
2082
2083bool
2084cell_visible (player *pl, int dx, int dy)
2085 CODE:
2086 RETVAL = FABS (dx) <= pl->socket.mapx / 2 && FABS (dy) <= pl->socket.mapy / 2
2087 && !pl->blocked_los [dx + pl->socket.mapx / 2][dy + pl->socket.mapy / 2];
2088 OUTPUT:
2089 RETVAL
2090
2091void 2092void
2092buggy_mapscroll (player *pl, int value = 1) 2093buggy_mapscroll (player *pl, int value = 1)
2093 CODE: 2094 CODE:
2094 pl->socket.buggy_mapscroll = value; 2095 pl->socket->buggy_mapscroll = value;
2095 2096
2096void 2097void
2097send (player *pl, SV *packet) 2098send (player *pl, SV *packet)
2098 CODE: 2099 CODE:
2099{ 2100{
2100 STRLEN len; 2101 STRLEN len;
2101 char *buf = SvPVbyte (packet, len); 2102 char *buf = SvPVbyte (packet, len);
2102 2103
2103 Write_String_To_Socket (&pl->socket, buf, len); 2104 pl->socket->send_packet (buf, len);
2104} 2105}
2105 2106
2106int 2107int
2107listening (player *pl, int new_value = -1) 2108listening (player *pl, int new_value = -1)
2108 CODE: 2109 CODE:
2173 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); 2174 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i)));
2174 RETVAL = INVOKE_((event_type)event, ARG_MAP (map), ARG_AV (av)); 2175 RETVAL = INVOKE_((event_type)event, ARG_MAP (map), ARG_AV (av));
2175 OUTPUT: RETVAL 2176 OUTPUT: RETVAL
2176 2177
2177SV *registry (maptile *map) 2178SV *registry (maptile *map)
2178 CODE:
2179 RETVAL = registry_of (map);
2180 OUTPUT:
2181 RETVAL
2182 2179
2183INCLUDE: $PERL genacc maptile ../include/map.h | 2180INCLUDE: $PERL genacc maptile ../include/map.h |
2184 2181
2185maptile *new (int width, int height) 2182maptile *new (int width, int height)
2186 PROTOTYPE: 2183 PROTOTYPE:
2393 2390
2394MODULE = cf PACKAGE = cf::settings 2391MODULE = cf PACKAGE = cf::settings
2395 2392
2396INCLUDE: $PERL genacc Settings ../include/global.h | 2393INCLUDE: $PERL genacc Settings ../include/global.h |
2397 2394
2395MODULE = cf PACKAGE = cf::client_socket
2396
2397INCLUDE: $PERL genacc client_socket ../include/newserver.h |
2398
2399int invoke (client_socket *ns, int event, ...)
2400 CODE:
2401 if (KLASS_OF (event) != KLASS_SOCKET) croak ("event class must be SOCKET");
2402 AV *av = (AV *)sv_2mortal ((SV *)newAV ());
2403 for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i)));
2404 RETVAL = INVOKE_((event_type)event, ARG_SOCKET (ns), ARG_AV (av));
2405 OUTPUT: RETVAL
2406
2407SV *registry (client_socket *ns)
2408

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines