[Prev][Next][Index][Thread]

# [APROG] re: overflow output buffer

- Date: Sat, 27 Jan 1996 12:00:51 PST
- From:
- Content-Type: text/plain; charset="us-ascii"

    This is code I use with 1.7.9, it allow to have two different buffers (one
    for general purpose notify and one for communication between the MOO and
    the client (out-of-band communications ?)) It should avoid losing any line
    of text and avoid mixing the text for the client and the text for the
    player.
    (Note: to work you need to change $player:notify to pass() rather than notify())

    @prop #1.notify_task 0 ""
    @prop #1.notify_buffer {} ""
    @prop #1.client_notify_buffer {} ""

    @verb $root_class:"notify*_lines client_notify*_lines" tnt rxd
    @program $root_class:notify
    if (is_player(this) && this in connected_players())
      if (!$perm_utils:controls(caller_perms(), this))
        return E_PERM;
      endif
      if (index(verb, "client"))
        buffer = "client_notify_buffer";
        other_buffer = "notify_buffer";
        notify = "notify_lines";
      else
        buffer = "notify_buffer";
        other_buffer = "client_notify_buffer";
        notify = "client_notify_lines";
      endif
      if (typeof(lines = args[1]) != LIST)
        lines = {args[1]};
      endif
      if (typeof(this.(buffer)) == LIST)
        this.(buffer) = {@this.(buffer), @lines};
      else
        "the buffer is corrupted.";
        this.(buffer) = lines;
      endif
      if ($code_utils:task_valid(this.notify_task))
        "There is already a notify task in charge of emptying the notify
    buffers -- Janus";
      else
        this.notify_task = task_id();
        while (this.(buffer))
          if (ticks_left() < 300 || seconds_left() <= 1)
            suspend(0);
            this.notify_task = task_id();
          endif
          line = this.(buffer)[1];
          this.(buffer) = listdelete(this.(buffer), 1);
          while (notify(this, line, 1) == 0)
            "Network buffer full... wait and see... -- Janus";
            suspend(0);
            this.notify_task = task_id();
          endwhile
        endwhile
        this.notify_task = 0;
        if (this.(other_buffer))
          this:(notify)({});
        endif
      endif
    endif
    .

    ---
    "640K ought to be enough for anybody."
        -- Bill Gates, 1981

- Prev: Re: @hoststats code
- Next: [CLIENT] Mac client sources ?
- Index: MOO-cows
- Thread: MOO-cows

Home | Subject Index | Thread Index