package org.jerlang.stdlib.timer; import org.jerlang.ProcessRegistry; import org.jerlang.erts.erlang.Error; import org.jerlang.type.Integer; import org.jerlang.type.List; import org.jerlang.type.PID; import org.jerlang.type.Term; import org.jerlang.vm.VirtualMachine; public class TimerSendAfter { private TimerSendAfter() { } public static Term dispatch(List params) { switch (params.length()) { case 2: Integer time2 = params.head().toInteger(); params = params.tail(); Term message2 = params.head(); return send_after_2(time2, message2); case 3: Integer time3 = params.head().toInteger(); params = params.tail(); Term message3 = params.head(); PID pid3 = ProcessRegistry.self().pid(); return send_after_3(time3, pid3, message3); default: throw Error.badarg; } } /** * Same as send_after(Time, self(), Message). * * http://www.erlang.org/doc/man/timer.html#send_after-2 */ public static Term send_after_2(Integer time, Term message) { return send_after_3(time, ProcessRegistry.self().pid(), message); } /** * Evaluates Pid ! Message after Time amount of time has elapsed. * (Pid can also be an atom of a registered name.) * Returns {ok, TRef}, or {error, Reason}. * * http://www.erlang.org/doc/man/timer.html#send_after-3 */ public static Term send_after_3(Integer time, PID pid, Term message) { return VirtualMachine.instance().send_after(time.toInt(), message, pid); } }