⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sping

📁 EPIC IRC客户端。来源于IRCII客户端但做了很多性能和功能的优化。
💻
字号:
# sping.irc: a script to calculate the lag between you and a server## written by nsx## note: this script uses the serial number 105 for its serial hooks#package sping# *** config variables **@sping_timeout = 1200# *** commands ***alias sping (server) {	@:source_server = servernum()	if (server == []) {		@:server = servername()	}	@:now = utime()	quote PING $server $server	@:ping_id = get_ping_id()	@:sping_data = [$ping_id $now $source_server $server]	push sping_list $sping_data	^eval timer -refnum $ping_id $sping_timeout @timeout_sping\($ping_id $server\)	xecho -b -w $serv_win() -- Sent PING to $server}alias vping (server) {	@:refnum = servernum()	if (server == []) {		@:server = servername()	}	@:serv = [!]	@:vping_list = vpings[$refnum]	for (@:i = 3, serv != [], @:i += 4) {		@:serv = word($i $vping_list)		if (serv == server) {			xecho -b -w $serv_win() -- Waiting for reply to previous VPING to $server			return		}	}	@:now = utime()	quote VERSION $server	@:ping_id = get_ping_id()	@:vping_data = [$ping_id $now $server]	push vpings[$servernum()] $vping_data	^eval timer -refnum $ping_id $sping_timeout @timeout_vping\($ping_id $server\)	^on ^351 "$server *" {		@:now = utime()		@:retval = handle_version($0 $now)		if (retval) {			xecho -b -w $serv_win() -- $1-		}		^on ^351 -"$0 *"		^on ^263 -"$0 VERSION *"	}	^on ^263 "$server VERSION *" {		@:now = utime()		@:retval = handle_version($0 $now)		if (retval) {			xecho -b -w $serv_win() -- $1-		}		^on ^351 -"$0 *"		^on ^263 -"$0 VERSION *"	}	xecho -b -w $serv_win() -- Sent VPING to $server}# *** functions ***alias calculate_ping_time (ithen, fthen, inow, fnow) {	@:idiff = inow - ithen	@:fdiff = fnow - fthen	if (fdiff < 0) {		@:fdiff += 1000000		@:idiff--	}	repeat ${6 - @fdiff} @:fdiff = [0] ## fdiff	@:minute_diff = my_floor(${idiff / 60})	@:second_diff = idiff % 60	if (idiff >= 60) {		if (minute_diff == 1) {			return $minute_diff min ${second_diff}.${fdiff} secs		} else {			return $minute_diff mins ${second_diff}.${fdiff} secs		}	} else {		return ${second_diff}.${fdiff} secs	}}alias clear_pings {	@sping_list = []	@ping_number = 0	fe ($myservers(*)) refnum {		@vpings[$refnum] = []	}}alias get_ping_id {	@ping_number++	return ping${ping_number}}alias handle_pong (server_name, now) {	@:inow = word(0 $now)	@:fnow = word(1 $now)	@:server = [!]	for (@:i = 4, server != [], @:i += 5) {		@:server = word($i $sping_list)		if (server == server_name) {			@:ping_id = word(${i - 4} $sping_list)			@:sping_itime = word(${i - 3} $sping_list)			@:sping_ftime = word(${i - 2} $sping_list)			@:reply_msg = calculate_ping_time($sping_itime $sping_ftime $inow $fnow)			@:new_list_start = leftw(${i - 4} $sping_list)			@:new_list_end = rightw(${(#sping_list - (i - 4)) - 5} $sping_list)			if (new_list_start == []) {				@sping_list = new_list_end			} else {				@sping_list = new_list_start ## [ ] ## new_list_end			}			^eval timer -del $ping_id			xecho -b -w $serv_win() -- PONG received from $server_name in $reply_msg			xecho -w $serv_win()			return		}	}	xecho -b -w $serv_win() -- Received PONG from $server_name}alias handle_version (server_name, now) {	@:inow = word(0 $now)	@:fnow = word(1 $now)	@:refnum = servernum()	@:server = [!]	@:vping_list = vpings[$refnum]	for (@:i = 3, server != [], @:i += 4) {		@:server = word($i $vping_list)		if (server == server_name) {			@:ping_id = word(${i - 3} $vping_list)			@:vping_itime = word(${i - 2} $vping_list)			@:vping_ftime = word(${i - 1} $vping_list)			@:reply_msg = calculate_ping_time($vping_itime $vping_ftime $inow $fnow)			@:new_list_start = leftw(${i - 3} $vping_list)			@:new_list_end = rightw(${(#vping_list - (i - 3)) - 4} $vping_list)			if (new_list_start == []) {				@:vping_list = new_list_end			} else {				@:vping_list = new_list_start ## [ ] ## new_list_end			}			@vpings[$refnum] = vping_list			^eval timer -del $ping_id			xecho -b -w $serv_win() -- VPING reply received from $server_name in $reply_msg			xecho -w $serv_win()			return 0		}	}	return 1}alias my_floor (number) {	switch ($count(. $number)) {		(1) {			return $before(. $number)		}		(0) {			return $number		}		(*) {			return -1		}	}}alias remove_matching_pings (field, value, entry_size, list) {	@:item = [!]	@:new_list = []	for (@:i = field, item != [], @:i += entry_size) {		@:item = word($i $list)		if (item != value) {			@:ping_entry = midw(${i - field} $entry_size $list)			push new_list $ping_entry		} else {			@:ping_id = word(${i - field} $list)			^eval timer -del $ping_id		}	}	return $new_list}alias serv_win (refnum) {	@:win_max = [255]	@:i = [1]	if (refnum == []) {		@:refnum = servernum()	}	while (i < win_max) {		if (winserv($i) == refnum) {			return $i		}		@:i++	}}alias timeout_sping (ping_id, server) {	if (sping_list == []) {		return	}	@sping_list = remove_matching_pings(0 $ping_id 5 $sping_list)	xecho -b -w $serv_win() -- PING to $server timed out}alias timeout_vping (ping_id, server) {	@:refnum = servernum($server)	@:vping_list = vpings[$refnum]	if (vping_list == []) {		return	}	@:vping_list = remove_matching_pings(0 $ping_id 4 $vping_list)	@vpings[$refnum] = vping_list	xecho -b -w $serv_win() -- VPING to $server timed out}# *** hooks ***# upon connection to any server, let's make sure we're not still waiting for# any responses previously sent from that serveron #^connect 105 "*" {	@:refnum = servernum($0)	@:vpings[$refnum] = []	@sping_list = remove_matching_pings(3 $refnum 5 $sping_list)}on ^pong "*" {	@:now = utime()	@handle_pong($0 $now)}# upon disconnection from any server, let's make sure we're not still waiting# for a response to any pings we sent while connected to that server.on #^server_lost 105 "*" {	@:refnum = [$0]	@:vpings[$refnum] = []	@sping_list = remove_matching_pings(3 $refnum 5 $sping_list)}# if we're told that a server doesn't exist, let's make sure we're not waiting# a ping reply from that server.on #^402 105 "*" {	@sping_list = remove_matching_pings(4 $1 5 $sping_list)	fe ($myservers(*)) refnum {		@vpings[$refnum] = remove_matching_pings(3 $1 4 $vpings[$refnum])	}}on ^set "SPING_TIMEOUT *" {	if ([$1] == []) {		xecho -b Current value of SPING_TIMEOUT is: $sping_timeout	} elsif (!isnumber($1)) {		xecho -b Value of SPING_TIMEOUT must be numeric!	} elsif ([$1] < 1) {		xecho -b Value of SPING_TIMEOUT must be greater than or equalto 1	} else {		@sping_timeout = [$1]		xecho -b Value of SPING_TIMEOUT set to $sping_timeout	}}@clear_pings()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -