[#70464] ljust, rjust... — "Chris Pine" <nemo@...>

Just thought I would run these ideas by everyone:

11 messages 2003/05/01

[#70502] temporary redirection of stdout — Andrew Walrond <andrew@...>

I'm new to ruby, so forgive any obvious stupididity, but can anyone

20 messages 2003/05/02

[#70535] SWIG on Solaris problem — Jim Freeze <jim@...>

Hi folks.

14 messages 2003/05/02

[#70594] Why is PHP so popular? What can we learn from the PHP camp? — ptkwt@...1.aracnet.com (Phil Tomson)

....and what can we learn from PHP's rapid rise to success?

99 messages 2003/05/05
[#70641] Re: Why is PHP so popular? What can we learn from the PHP camp? — Andreas Schwarz <usenet@...> 2003/05/05

Aredridel wrote:

[#70652] A wishlist for a "Ruby Standard Library" — Aredridel <aredridel@...> 2003/05/05

A wishlsit for a "Ruby Standard Library":

[#70655] Re: A wishlist for a "Ruby Standard Library" — Brian Candler <B.Candler@...> 2003/05/05

On Tue, May 06, 2003 at 07:39:54AM +0900, Aredridel wrote:

[#70673] Re: A wishlist for a "Ruby Standard Library" — Mark Wilson <mwilson13@...> 2003/05/06

[snipped many wonderful things.]

[#70759] Testing for a class existence — "Gennady" <gfb@...>

Does anybody know an easy way to test for a class/module existence in =

15 messages 2003/05/06

[#70770] capture output — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I have seen much talking about this topic, but no working code!

68 messages 2003/05/06
[#70929] Re: IO.pipe + thread = hangs (was: Re: capture output) — "Robert Klemme" <bob.news@...> 2003/05/08

[#71741] Named Pipes — Mark Firestone <nedry@...> 2003/05/19

What is the recommended procedure for using named pipes in Ruby. Does one

[#71745] Re: Named Pipes — Brian Candler <B.Candler@...> 2003/05/19

On Mon, May 19, 2003 at 06:33:17PM +0900, Mark Firestone wrote:

[#70842] Symbiosis offer: trade Ruby for German :-) — Mauricio Fern疣dez <batsman.geo@...>

17 messages 2003/05/07

[#70865] access a variables name? — "meinrad.recheis" <my.name.here@...>

is it possible to access the variable-name of an object?

14 messages 2003/05/07

[#70891] Syck 0.25 + YAML.rb -- Objects in plain-text — why the lucky stiff <ruby-talk@...>

..my faithful friends..

20 messages 2003/05/07

[#70919] petition for raa-install to be included in 1.8 — ptkwt@...1.aracnet.com (Phil Tomson)

Similar to the YamlInRuby petition which has now closed.

14 messages 2003/05/08
[#70920] Re: petition for raa-install to be included in 1.8 — Sam Roberts <sroberts@...> 2003/05/08

I just looked again, and remember why I don't know anything about

[#70921] Re: petition for raa-install to be included in 1.8 — why the lucky stiff <ruby-talk@...> 2003/05/08

You can find a tutorial on using raa-install (as well as its API) at:

[#70985] Can a global be a constant? — Jim Freeze <jim@...>

Hi

36 messages 2003/05/08
[#71001] Re: Can a global be a constant? — "Hal E. Fulton" <hal9000@...> 2003/05/08

----- Original Message -----

[#71003] Re: Can a global be a constant? — Jim Freeze <jim@...> 2003/05/08

On Friday, 9 May 2003 at 8:23:52 +0900, Hal E. Fulton wrote:

[#71007] Re: Can a global be a constant? — dblack@... 2003/05/08

Hi --

[#71036] Re: Regexp: why does (re)* return only last repetition? — "Robert Klemme" <bob.news@...>

21 messages 2003/05/09
[#71209] Re: Regexp: why does (re)* return only last repetition? — "Robert Klemme" <bob.news@...> 2003/05/12

[#71225] Re: Regexp: why does (re)* return only last repetition? — Austin Ziegler <austin@...> 2003/05/12

On Mon, 12 May 2003 17:39:19 +0900, Robert Klemme wrote:

[#71229] Re: Regexp: why does (re)* return only last repetition? — Brian Candler <B.Candler@...> 2003/05/12

On Mon, May 12, 2003 at 10:18:00PM +0900, Austin Ziegler wrote:

[#71266] Re: Regexp: why does (re)* return only last repetition? — Austin Ziegler <austin@...> 2003/05/12

On Mon, 12 May 2003 23:51:44 +0900, Brian Candler wrote:

[#71042] TCP Sockets — Dominik Werder <dwerder@...>

Hi there,

28 messages 2003/05/09
[#71089] Re: TCP Sockets — Tom Felker <tcfelker@...> 2003/05/09

On Fri, 2003-05-09 at 05:40, Dominik Werder wrote:

[#71543] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

>> How can I tell how many bytes can be read from an IO object without

[#71547] Re: TCP Sockets — Brian Candler <B.Candler@...> 2003/05/16

On Fri, May 16, 2003 at 05:14:17PM +0900, Dominik Werder wrote:

[#71550] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

my problem is not the http protocol itself (not at this time :) but the IO-

[#71551] Re: TCP Sockets — Brian Candler <B.Candler@...> 2003/05/16

On Fri, May 16, 2003 at 07:20:30PM +0900, Dominik Werder wrote:

[#71553] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

> Maybe, but threads are really the "ruby way" to solve this problem.

[#71557] Re: TCP Sockets — Brian Candler <B.Candler@...> 2003/05/16

On Fri, May 16, 2003 at 07:53:39PM +0900, Dominik Werder wrote:

[#71562] Re: TCP Sockets — Dominik Werder <dwerder@...> 2003/05/16

> That would mean mixing the binary streams in a non-deterministic way,

[#71107] RCR for child execution — Brian Candler <B.Candler@...>

Looking on RubyGarden it seems that the RCR process there is "resting", so

99 messages 2003/05/10
[#71122] Re: RCR for child execution — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/10

On Sun, 11 May 2003 01:50:49 +0900, Brian Candler wrote:

[#71126] Re: RCR for child execution — Brian Candler <B.Candler@...> 2003/05/10

On Sun, May 11, 2003 at 01:27:31AM +0900, Simon Strandgaard wrote:

[#71364] Re: RCR for child execution — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/13

On Tue, 13 May 2003 21:11:08 +0000, ahoward wrote:

[#71385] Re: RCR for child execution — matz@... (Yukihiro Matsumoto) 2003/05/14

Hi,

[#71152] Is Rubygarden's wiki restricted to English? — Mauricio Fern疣dez <batsman.geo@...>

20 messages 2003/05/11
[#71160] Re: Is Rubygarden's wiki restricted to English? — "Hal E. Fulton" <hal9000@...> 2003/05/11

----- Original Message -----

[#71165] Re: Is Rubygarden's wiki restricted to English? — Mauricio Fern疣dez <batsman.geo@...> 2003/05/11

On Mon, May 12, 2003 at 12:40:26AM +0900, Hal E. Fulton wrote:

[#71189] efficiency advice needed — "meinrad.recheis" <my.name.here@...>

hi,

12 messages 2003/05/11

[#71297] State Pattern Implementation — "Robert Klemme" <bob.news@...>

22 messages 2003/05/13

[#71361] Objects VS Datastructures — Simon Vandemoortele <deliriousREMOVEUPPERCASETEXTTOREPLY@...>

19 messages 2003/05/13

[#71447] Embedding/GC/heap corruption problem — "Jan Bernhardt" <j.bernhardt@...>

Hi,

22 messages 2003/05/14

[#71488] Test::Unit sequencing — Brian Candler <B.Candler@...>

A question for more experienced Test::Unit users.

23 messages 2003/05/15
[#71492] Re: Test::Unit sequencing — Anders Bengtsson <ndrsbngtssn@...> 2003/05/15

--- Brian Candler <B.Candler@pobox.com> wrote:

[#71508] Re: Test::Unit sequencing — ahoward <ahoward@...> 2003/05/15

On Thu, 15 May 2003, [iso-8859-1] Anders Bengtsson wrote:

[#71510] RCR: $INCLUDED global var — martindemello@... (Martin DeMello)

$INCLUDED = (__FILE__ != $0)

25 messages 2003/05/15
[#71515] Re: RCR: $INCLUDED global var — matz@... (Yukihiro Matsumoto) 2003/05/15

Hi,

[#71525] Re: RCR: $INCLUDED global var — ahoward <ahoward@...> 2003/05/15

On Fri, 16 May 2003, Yukihiro Matsumoto wrote:

[#71520] public/protected/private syntax — Guillaume Marcais <guslist@...>

I tend to find the public/protected/private keywords in Ruby a little odd.

27 messages 2003/05/15
[#71540] Re: public/protected/private syntax — "Robert Klemme" <bob.news@...> 2003/05/16

[#71573] Re: public/protected/private syntax — Guillaume Marcais <guillaume.marcais@...> 2003/05/16

On Friday 16 May 2003 03:38 am, you wrote:

[#71595] Re: public/protected/private syntax — Austin Ziegler <austin@...> 2003/05/16

On Fri, 16 May 2003 23:33:21 +0900, Guillaume Marcais wrote:

[#71560] gzip cgi compression — Dominik Werder <dwerder@...>

Is zlib compatible with HTTP-gzip-output-compression?

14 messages 2003/05/16

[#71636] select strange behavier — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

'select' is suppose to watch some file-descriptors and when an event

22 messages 2003/05/17

[#71673] An Object Going Out Of Scope — "vinita Papur" <gkapur@...>

A quick question. How can one discern when an object goes out of scope?

46 messages 2003/05/18
[#71678] Re: An Object Going Out Of Scope — "MikkelFJ" <mikkelfj-anti-spam@...> 2003/05/18

[#71680] Re: An Object Going Out Of Scope — Mauricio Fern疣dez <batsman.geo@...> 2003/05/18

On Sun, May 18, 2003 at 06:08:43PM +0900, MikkelFJ wrote:

[#71681] ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

i need this for a realtime game application which has embedded ruby -- after

[#71683] Re: ruby garbage collection — Mauricio Fern疣dez <batsman.geo@...> 2003/05/18

On Sun, May 18, 2003 at 08:35:11PM +0900, Gaffer wrote:

[#71685] Re: ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

strange, i found the rb_gc call on my own and called that to good effect

[#71688] Re: ruby garbage collection — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/18

On Sun, 18 May 2003 22:10:18 +0900, Gaffer wrote:

[#71689] Re: ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

i think its actually the GC cleaning up matrix and vector classes (my own

[#71691] Re: ruby garbage collection — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/18

On Sun, 18 May 2003 22:39:17 +0900, Gaffer wrote:

[#71692] Re: ruby garbage collection — "Gaffer" <gaffer@...> 2003/05/18

i'm pretty sure i've tracked down the cause, this is my first time embedding

[#71695] Re: ruby garbage collection — "Simon Strandgaard" <0bz63fz3m1qt3001@...> 2003/05/18

On Sun, 18 May 2003 23:48:28 +0900, Gaffer wrote:

[#71948] How I'd like method-wrapping to work... — "Hal E. Fulton" <hal9000@...>

OK, I read Matz's blog entries as well as I could.

16 messages 2003/05/21

[#72030] why is "does" missing from this sub!-stitution? — Dave Oshel <dcoshel@...>

[~/Desktop] dave$ cat foobar.rb ; foobar.rb

19 messages 2003/05/22
[#72037] Re: why is "does" missing from this sub!-stitution? — Dave Oshel <dcoshel@...> 2003/05/22

In article <20030522202818.GA24497@student.ei.uni-stuttgart.de>,

[#72056] Naive CGI question — "Hal E. Fulton" <hal9000@...>

I'm betting this is either impossible

15 messages 2003/05/23

[#72134] Problem compiling extension on Solaris — "Tim Hunter" <cyclists@...>

I have an user who is trying to build RMagick on Solaris with Ruby 1.6.8.

22 messages 2003/05/25
[#72262] Re: Problem compiling extension on Solaris — Daniel Berger <djberge@...> 2003/05/27

[#72150] Binary Tree vs. Hash — Xiangrong Fang <xrfang@...>

Hi ruby fans,

47 messages 2003/05/26

[#72184] Project Directory Structure — Jim Freeze <jim@...>

Hi:

47 messages 2003/05/26
[#72218] Re: Project Directory Structure — "MikkelFJ" <mikkelfj-anti-spam@...> 2003/05/26

[#72222] Re: Project Directory Structure — Jim Freeze <jim@...> 2003/05/26

Thanks everyone for your input so far.

[#72244] Re: Project Directory Structure — Robert Feldt <feldt@...> 2003/05/27

On Tue, 27 May 2003, Jim Freeze wrote:

[#72260] Re: Project Directory Structure — Jim Freeze <jim@...> 2003/05/27

On Tuesday, 27 May 2003 at 18:26:53 +0900, Robert Feldt wrote:

[#72265] Re: Project Directory Structure — Jim Freeze <jim@...> 2003/05/27

Thanks for all the input. A description of the Project

[#72269] Re: Project Directory Structure — Robert Feldt <feldt@...> 2003/05/27

On Wed, 28 May 2003, Jim Freeze wrote:

[#72274] RCR: unpack/pack Bignum — Robert Feldt <feldt@...>

I'm sure this has been discussed before and maybe there are good reasons

27 messages 2003/05/27
[#72375] Re: RCR: unpack/pack Bignum — Robert Feldt <feldt@...> 2003/05/28

No one seems to be interested in this issue so I'll have to reply to

[#72381] Re: RCR: unpack/pack Bignum — nobu.nokada@... 2003/05/28

Hi,

[#72394] Re: RCR: unpack/pack Bignum — Robert Feldt <feldt@...> 2003/05/29

On Thu, 29 May 2003 nobu.nokada@softhome.net wrote:

[#72403] Re: RCR: unpack/pack Bignum — nobu.nokada@... 2003/05/29

Hi,

[#72600] What is BER compression? (was RCR: unpack/pack Bignum) — Sam Roberts <sroberts@...> 2003/05/31

Is it documented anywhere, what this 'w' template is useful for?

[#72371] Windows Installer for Ruby 1.8.0 (CVS) — Andrew Hunt <andy@...>

Hi all,

16 messages 2003/05/28

[#72388] Array.extend versus instance.extend — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I want to install 'shift_until_kind_of' in the global Array class

18 messages 2003/05/29

[#72420] Metakit for Ruby - Would you want it? — bobx@... (Bob)

I have a gentleman in England who I have been talking with who is

23 messages 2003/05/29

[#72439] Iteration - last detection — "Orion Hunter" <orion2480@...>

Is there any built in functionality for iteration that will allow me to

41 messages 2003/05/29
[#72510] Re: Iteration - last detection — Carlos <angus@...> 2003/05/30

> Is there any built in functionality for iteration that will allow me to

[#72577] IF statement in ruby 1.8.0 (2003-05-26) [i386-mswin32] — "Shashank Date" <sdate@...>

Just when I thought that I had perfectly understood the IF statement in

14 messages 2003/05/31

Embedding/GC/heap corruption problem

From: "Jan Bernhardt" <j.bernhardt@...>
Date: 2003-05-14 21:06:35 UTC
List: ruby-talk #71447
Hi,

I'm working on adding Ruby scripting to the Half-Life game engine, similar
to several other projects, like AMXmod (http://amxmod.net). Unfortunately
I'm running into problems which seem to be related to garbage collection.
I think I have to give a short overview on how the interaction between the
game engine and the scripting engine is structured.

The Half-Life engine communicates with clients by sending messages. One
purpose of the scripting framework is to intercept those messages and run Ruby
code in reaction to these events.

The game engine calls the C functions MessageBegin, MessageEnd and several
other functions to store data inside a message like WriteShort and WriteString.
MessageBegin initiates a new messages, afterwards WriteXXX function calls are
made to attach data. MessageEnd terminates the message. The C part of the
scripting engine catches these function calls and utilizes a global (in C) Ruby
variable to store the message's data.

Errors (segfaults) occur on execution of the message dispatching code of the
Ruby part (MessageRegistry.dispatch_message). It looks like the GC
reaps the message's 'args' instance variable - an array containing the message
data - even though its referenced by the global message variable. Surprisingly
it happens rather seldom, say between every 1000's and 10000's message
dispatch. The problem does not occur when I manually do garbage collections
on a *very* regular basis.

An error case looks like this:

| L 05/14/2003 - 22:41:15: [RUBY] Message count: 1039
| L 05/14/2003 - 22:41:15: [RUBY] Message type: StatusValue (107)
| L 05/14/2003 - 22:41:15: [RUBY] Message args: [1,1]
| L 05/14/2003 - 22:41:15: [RUBY] Message receiver: 3, destination: 1
| L 05/14/2003 - 22:41:15: [RUBY] Message count: 1040
| L 05/14/2003 - 22:41:15: [RUBY] Message type: StatusValue (107)
| L 05/14/2003 - 22:41:15: [RUBY] Message args: [2,1]
| L 05/14/2003 - 22:41:15: [RUBY] Message receiver: 3, destination: 1
| cstrike/addons/halfruby/kernel/message_dispatch.rb:26: [BUG] Segmentation fault
| ruby 1.6.7 (2002-03-19) [i386-linux]

Stacktrace case 1:

(gdb) bt
#0  0x400a4fd1 in kill () from /lib/libc.so.6
#1  0x40036762 in raise () from /lib/libpthread.so.0
#2  0x400a4ca2 in raise () from /lib/libc.so.6
#3  0x400a604d in abort () from /lib/libc.so.6
#4  0x43a67cd9 in rb_bug () at error.c:178
#5  0x43ab4acf in sigsegv () at signal.c:393
#6  0x40039929 in __pthread_sighandler () from /lib/libpthread.so.0
#7  <signal handler called>
#8  0x43a6b16d in jump_tag_but_local_jump (state=6) at eval.c:1314
#9  0x43a731ff in rb_call0 (klass=1138029288, recv=1138014008, id=9313, argc=0, argv=0xbfffec6c, body=0x43d4bbd4, nosuper=0) at eval.c:4542
#10 0x43a73584 in rb_call (klass=1138029288, recv=1138014008, mid=9313, argc=1, argv=0xbfffec68, scope=1) at eval.c:4606
#11 0x43a73857 in rb_funcall (recv=1138014008, mid=9313, n=1) at ruby.h:571
#12 0x43a5dee5 in MessageEnd() () at messages.cpp:31
#13 0x43772cfe in mm_MessageEnd () from ./cstrike/addons/metamod/dlls/metamod_i386.so

Stacktrace case 2:

(gdb) bt
#0  0x400a4fd1 in kill () from /lib/libc.so.6
#1  0x40036762 in raise () from /lib/libpthread.so.0
#2  0x400a4ca2 in raise () from /lib/libc.so.6
#3  0x400a604d in abort () from /lib/libc.so.6
#4  0x43a67cd9 in rb_bug () at error.c:178
#5  0x43ab4acf in sigsegv () at signal.c:393
#6  0x40039929 in __pthread_sighandler () from /lib/libpthread.so.0
#7  <signal handler called>
#8  0x00000011 in ?? ()
#9  0x43a6961d in search_method (klass=1137889328, id=3001, origin=0xbfffd978) at eval.c:247
#10 0x43a69672 in rb_get_method_body (klassp=0xbfffd9c4, idp=0xbfffd9a8, noexp=0xbfffd9ac) at eval.c:268
#11 0x43a734cc in rb_call (klass=1137889328, recv=1137889348, mid=3001, argc=0, argv=0x0, scope=1) at eval.c:4583
#12 0x43a73857 in rb_funcall (recv=1137889348, mid=3001, n=0) at ruby.h:571
#13 0x43ab7cee in rb_obj_as_string (obj=1137889348) at string.c:191
#14 0x43a6efb8 in rb_eval (self=1138014008, n=0x0) at eval.c:2895
#15 0x43a6e587 in rb_eval (self=1138014008, n=0x0) at ruby.h:576
#16 0x43a6cafc in rb_eval (self=1138014008, n=0x0) at eval.c:2028
#17 0x43a6cafc in rb_eval (self=1138014008, n=0x0) at eval.c:2028
#18 0x43a730a9 in rb_call0 (klass=1138029288, recv=1138014008, id=9313, argc=0, argv=0xbffff1d8, body=0x43d4bbd4, nosuper=0) at eval.c:4513
#19 0x43a73584 in rb_call (klass=1138029288, recv=1138014008, mid=9313, argc=1, argv=0xbffff1d4, scope=1) at eval.c:4606
#20 0x43a73857 in rb_funcall (recv=1138014008, mid=9313, n=1) at ruby.h:571
#21 0x43a5dee5 in MessageEnd() () at messages.cpp:31
#22 0x43772cfe in mm_MessageEnd () from ./cstrike/addons/metamod/dlls/metamod_i386.so

(Case 1 and 2 differ in changed statement order in dispatch_message in the
'if (@verbose)' block, case 1 crashes on logging the @message_count first,
case 2 on logging the @args array first.)

I hope you're able to follow my descriptions and understand what's basically
going on when reading the attached sources. I wonder if there is some more
or less obvious error I'm doing here, since I'm pretty new to Ruby extensions
and embedding.

I know the description is far from good and feel free to ask any question you
have with understanding the problem. If anybody is interested in full sources
feel free to ask also. Wow, what a confused post that is.

Any hints very appreciated since I'm pretty stuck.

- Jan.

The relevant code parts follow (I left out some #include's and maybe some
unimportant code).

messages.cpp
------------

static VALUE message = Qnil;
static VALUE args = Qnil;
static VALUE message_registry = Qnil;

void messages_init() {
    rb_global_variable(&message);
    message = rb_eval_string("Message.new");
    args = rb_iv_get(message, "@args");
    message_registry = rb_eval_string("MessageRegistry.instance");
}

void MessageBegin(int dest, int _msg_type, const float *origin, edict_t *edict) {
    rb_funcall(args, rb_intern("clear"), 0);
    rb_iv_set(message, "@message_type", INT2FIX(_msg_type));
    rb_iv_set(message, "@destination", INT2FIX(dest));
    rb_iv_set(message, "@receiver", INT2FIX(ENTINDEX(edict)));
    RETURN_META(MRES_IGNORED);
}

void MessageEnd(void) {
    rb_funcall(message_registry, rb_intern("dispatch_message"), 1, message);
    RETURN_META(MRES_IGNORED);
}

void WriteByte(int value) {
    rb_ary_push(args, INT2FIX(value));
    RETURN_META(MRES_IGNORED);
}

void WriteChar(int value) {
    rb_ary_push(args, INT2FIX(value));
    RETURN_META(MRES_IGNORED);
}

void WriteShort(int value) {
    rb_ary_push(args, INT2FIX(value));
    RETURN_META(MRES_IGNORED);
}

void WriteLong(int value) {
    rb_ary_push(args, INT2NUM(value));
    RETURN_META(MRES_IGNORED);
}

void WriteAngle(float value) {
    rb_ary_push(args, rb_float_new(value));
    RETURN_META(MRES_IGNORED);
}

void WriteCoord(float value) {
    rb_ary_push(args, rb_float_new(value));
    RETURN_META(MRES_IGNORED);
}

void WriteString(const char *s) {
    rb_ary_push(args, rb_str_new2(s));
    RETURN_META(MRES_IGNORED);
}

void WriteEntity(int value) {
    rb_ary_push(args, INT2NUM(value));
    RETURN_META(MRES_IGNORED);
}


message_dispatch.rb
-------------------

class MessageRegistry
    include Singleton

    attr_accessor :verbose, :message_count 

    def initialize
	@registry = {}
	@message_count = 0
	@verbose = true
    end

    def register_for(message_name, &block)
	id = Game.get_message_id(message_name)
	Game.log "Registering for message id #{id}"
	if (! @registry.has_key? id)
	    @registry[id] = []
	end
	@registry[id] << block 
    end

    def dispatch_message(message)
	@message_count += 1  
	if (@verbose) 
	    Game.log "Message count: #{@message_count}"
	    Game.log "Message type: #{message.message_name} (#{message.message_type})"
	    Game.log "Message args: [#{message.args.join ','}]"
	    Game.log "Message receiver: #{message.receiver}, destination: #{message.destination}"
	end

	if (@registry.has_key? message.message_type)
	    @registry[message.message_type].each { |block| block.call(message) }
	end
    end
end

class Message
    attr_accessor :message_type, :destination, :receiver, :args

    def initialize
	@args = []
	@message_type = nil
	@destination = nil
	@receiver = nil
    end

    def message_name
	Game.get_message_name(@message_type)
    end
end


rb_game.cpp
-----------

[...]

VALUE rb_game_log(VALUE self, VALUE message) {
    UTIL_LogPrintf("[%s] %s\n", MODULE_TAG, STR2CSTR(rb_obj_as_string(message)));
    return Qnil;
}

void rb_game_init() {
    rb_game_module = rb_define_module("Game");

    [...]

    rb_define_module_function(rb_game_module, "log", RUBY_METHOD_FUNC(rb_game_log), 1);
    
    [...]
}

[...]

In This Thread

Prev Next