📄 navaction.cs
字号:
namespace Imps.Client.Core
{
using Imps.Client.Base;
using Imps.Client.Utils;
using Imps.Common;
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Xml;
using System.Xml.XPath;
public sealed class NavAction : LoginAction
{
private const string errorMessage = "获取系统配置发生错误";
private bool? localCacheHit;
private string navUri;
public NavAction(User user, ILoginListner listener) : base(user, listener)
{
this.navUri = Imps.Client.Core.FixedClientSetting.Instance.NavigatorServerUri;
if (string.IsNullOrEmpty(this.navUri))
{
throw new ArgumentNullException("navigator uri should not be null!");
}
}
public override void Cancel()
{
}
private bool CheckLocalCache()
{
bool flag = false;
ServerUriSetting serverUriSetting = base.User.Configuration.SystemSetting.ServerUriSetting;
if (((base.User.Configuration.SystemSetting.SvrUriVerion > 0) && !string.IsNullOrEmpty(serverUriSetting.SipcProxy)) && !string.IsNullOrEmpty(serverUriSetting.UriHttpTunnel))
{
flag = true;
}
return flag;
}
public override void Clear()
{
base.User.Configuration.ClearSysCfg();
}
public override void Dispose()
{
}
public bool DoExecute(ref bool isCompleted)
{
bool flag = false;
isCompleted = true;
try
{
string s = this.GetReqStr();
byte[] bytes = Encoding.UTF8.GetBytes(s);
string detail = string.Empty;
base.NotifyMessage("开始获取系统配置,导航Url:" + this.navUri);
HttpWebRequest request = ConnectionFactory.CreateHttpWebRequest(this.navUri, base.User, true, false);
ClientLogger.WriteLogin("获取系统配置的参数:", 0, string.Format("Url:{0}, Post body:{1}", this.navUri, s), 2);
request.KeepAlive = false;
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
using (HttpWebResponse response = ((HttpWebResponse) request.GetResponse()))
{
try
{
string text3 = response.Headers["Date"];
if (!string.IsNullOrEmpty(text3))
{
User.ServerTime = DateTime.Parse(text3);
}
}
catch (Exception exception)
{
base.NotifyException("解析服务器时间的时候发生错误", exception);
}
using (Stream stream2 = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream2))
{
detail = reader.ReadToEnd();
}
}
}
ClientLogger.WriteLogin("获取系统配置的服务器响应信息:", 0, detail, 2);
base.User.Configuration.InitSysSetting(detail);
flag = true;
base.NotifyMessage("获取系统配置完成");
}
catch (WebException exception2)
{
if ((--base.tryTimes > 0) && ExceptionHandler.IsRetryNeeded(exception2))
{
base.NotifyException("获取系统配置发生错误", exception2);
isCompleted = false;
return flag;
}
base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.WebException, exception2);
}
catch (XmlException exception3)
{
base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.XmlException, exception3);
}
catch (XPathException exception4)
{
base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.XPathException, exception4);
}
catch (ThreadAbortException exception5)
{
base.NotifyWarning("获取系统配置发生错误", exception5);
}
catch (Exception exception6)
{
base.NotifyLoginFailed("获取系统配置发生错误", ExceptionType.CommonException, exception6);
}
return flag;
}
public override bool Execute()
{
bool isCompleted = false;
bool flag2 = false;
while (!isCompleted)
{
flag2 = this.DoExecute(ref isCompleted);
}
return flag2;
}
private string GetReqStr()
{
using (StringWriter w = new StringWriter())
{
using (XmlTextWriter writer2 = new XmlTextWriter(w))
{
writer2.WriteStartElement("config");
writer2.WriteStartElement("user");
if (string.IsNullOrEmpty(base.User.MobileNo))
{
writer2.WriteAttributeString("sid", base.User.Sid.ToString());
}
else
{
writer2.WriteAttributeString("mobile-no", base.User.MobileNo);
}
writer2.WriteEndElement();
writer2.WriteStartElement("client");
writer2.WriteAttributeString("type", "PC");
writer2.WriteAttributeString("version", Configuration.FixedClientSetting.Version);
writer2.WriteAttributeString("platform", EnvHelper.GetOsString());
writer2.WriteEndElement();
writer2.WriteStartElement("servers");
writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.SvrUriVerion.ToString());
writer2.WriteEndElement();
writer2.WriteStartElement("service-no");
writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.SvcNoVerion.ToString());
writer2.WriteEndElement();
writer2.WriteStartElement("parameters");
writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.ParamsVerion.ToString());
writer2.WriteEndElement();
writer2.WriteStartElement("hints");
writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.HintsVerion.ToString());
writer2.WriteEndElement();
writer2.WriteStartElement("http-applications");
writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.HttpAppUriVerion.ToString());
writer2.WriteEndElement();
writer2.WriteStartElement("client-config");
writer2.WriteAttributeString("version", base.User.Configuration.SystemSetting.SysClientConfigVersion.ToString());
writer2.WriteEndElement();
writer2.WriteEndElement();
}
return w.ToString();
}
}
public override bool LocalCacheHit
{
get
{
if (!this.localCacheHit.get_HasValue())
{
try
{
base.NotifyMessage("开始加载系统配置本地缓存");
if (base.User.Sid <= 0)
{
long mappedSid = UserAccounts.GetMappedSid(base.User.MobileNo);
base.User.Sid = mappedSid;
}
base.User.Configuration.LoadSysCfg();
if (base.GetCurrentLoginPresence() == MainPresence.OfflineLogin)
{
return true;
}
if (!this.navUri.Equals(base.User.Configuration.SystemSetting.NavigatorServerUri, 1))
{
base.NotifyMessage("导航地址发生变化,清除本地相关缓存");
base.User.Configuration.ClearSysCfg();
string userId = base.User.PersistentManager.UserId.ToString();
base.User.PersistentManager.DelUserCfgById(userId);
base.User.PersistentManager.DelUserInfoById(userId);
base.User.PersistentManager.DelContactsInfoById(userId);
base.User.PersistentManager.DelPermissionById(userId);
base.ClearUri();
}
else if (!base.User.Configuration.SystemSetting.ClientVersion.Equals(Configuration.FixedClientSetting.Version))
{
base.User.Configuration.ClearSysCfg();
return false;
}
base.NotifyMessage("系统配置本地缓存加载完成");
this.localCacheHit = new bool?(this.CheckLocalCache());
}
catch (Exception exception)
{
this.localCacheHit = false;
base.NotifyException("系统配置本地缓存加载过程中出现错误", exception);
}
}
return this.localCacheHit.GetValueOrDefault(false);
}
}
public override Imps.Client.Core.LoginStage LoginStage
{
get
{
return Imps.Client.Core.LoginStage.RetriveSystemConfig;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -