close()时没有SP_Response参数,怎么通知其他用户?

20 views
Skip to first unread message

tiger

unread,
Oct 11, 2009, 12:01:01 AM10/11/09
to spserver
void SP_ChatHandler :: timeout( SP_Response * response )
{
//这里,可以通过response ,addMessage,发送给其他在线用户。
}

void SP_ChatHandler :: close()
{
//这里没有response ,但同样要通知其他的在线用户,如何操作?
}

lau stephen

unread,
Oct 11, 2009, 12:11:35 AM10/11/09
to spse...@googlegroups.com
这个 close 的方法,是用于给 handler 清理资源用的,用于和 start 对称的。

close 没有带上 response ,原因在于 close 被调用的场合。
close 不会被单独调用,在调用 clsoe 之前,要么是刚刚调用了 handle 方法,
要么是刚刚调用了 timeout/error 方法,这些方法都刚刚返回了 respone 。

如果调用了 handle 方法,接着调用 close ,那是因此 handle 方法返回了 -1 要结束连接。
对于 timeout/error 方法,是因为产生了 timeout 或者 error 时间,也需要结束连接。

close 是在需要结束连接的情况下被调用的,在被调用之前,
通过 handle/timeout/error 方法,handler 类做了相应的处理。

2009/10/11 tiger <tigers...@gmail.com>:

tiger

unread,
Oct 11, 2009, 12:15:41 AM10/11/09
to spserver
能上一下gtalk吗, 传给你一个程序。是我调用spserver写的,使用了response->addMessage(msg);但是没发出
去。

tiger

unread,
Oct 11, 2009, 12:25:24 AM10/11/09
to spserver
错误是997,表示 重叠 I/O 操作在进行中

if( WSAENOBUFS == lastError && retry < SP_MAX_RETRY - 1 )
{
Sleep( 50 * retry );
continue;
}
else
{
if( ERROR_IO_PENDING != lastError )
ret = FALSE;
break;
}

执行到else里面了。
Reply all
Reply to author
Forward
0 new messages