📄 getofflinemessageaction.cs
字号:
namespace Imps.Client.Core
{
using Imps.Base.Sipc;
using Imps.Client.Base;
using System;
using System.Threading;
public sealed class GetOfflineMessageAction : LoginAction
{
private const string errorMessage = "获取离线消息出现错误";
private bool result;
private int retryTime;
private AutoResetEvent waitOfflineMsg;
public GetOfflineMessageAction(User user, ILoginListner listener) : base(user, listener)
{
this.retryTime = 3;
}
public override void Cancel()
{
}
public override void Clear()
{
}
public override void Dispose()
{
}
public override bool Execute()
{
try
{
base.NotifyMessage("开始获取离线消息");
this.result = false;
SipRequest msg = base.User.CreateSipRequest("S");
msg.Message.AddHeader(new SipcEventHeader("GetOfflineMessages"));
msg.RetryTimes = this.retryTime;
msg.FinalResponseReceived += new EventHandler<SipResponseReceivedEventArgs>(this, (IntPtr) this.req_FinalResponseReceived);
msg.SendMessageFailed += new EventHandler<FailedEventArgs>(this, (IntPtr) this.req_SendMessageFailed);
msg.WaitResponseTimeout += new EventHandler(this.req_WaitResponseTimeout);
if (this.waitOfflineMsg == null)
{
this.waitOfflineMsg = new AutoResetEvent(false);
}
base.User.SendSipMessage(msg);
this.waitOfflineMsg.WaitOne(this.TimeOut, false);
base.NotifyMessage("获取离线消息结束");
}
catch (Exception exception)
{
base.NotifyException("获取离线消息出现错误", exception);
}
return this.result;
}
private void req_FinalResponseReceived(object sender, SipResponseReceivedEventArgs e)
{
SipResponse response = e.Response;
try
{
if (response.Message.StatusCode == 200)
{
this.result = true;
this.waitOfflineMsg.Set();
}
else
{
base.NotifyException("获取离线消息出现错误", new SipCException(response.Message.StatusCode, "获取离线消息出现错误"));
this.result = false;
this.waitOfflineMsg.Set();
}
}
catch (Exception exception)
{
base.NotifyException("获取离线消息出现错误", exception);
this.result = false;
this.waitOfflineMsg.Set();
}
}
private void req_SendMessageFailed(object sender, FailedEventArgs e)
{
base.NotifyException("获取离线消息出现错误", new SipCException(900, "获取离线消息出现错误"));
this.result = false;
this.waitOfflineMsg.Set();
}
private void req_WaitResponseTimeout(object sender, EventArgs e)
{
base.NotifyException("获取离线消息出现错误", new SipCException(0x385, "获取离线消息出现错误"));
this.result = false;
this.waitOfflineMsg.Set();
}
public override bool LocalCacheHit
{
get
{
return true;
}
}
public override Imps.Client.Core.LoginStage LoginStage
{
get
{
return Imps.Client.Core.LoginStage.GetOfflineMessage;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -