📄 conversationmanager.cs
字号:
{
Imps.Client.Core.Conversation conversation = enumerator.get_Current();
if ((conversation.CurrentDialog != null) && (conversation.CurrentDialog.To == req.Message.From.RawValue))
{
return conversation;
}
}
}
finally
{
enumerator.Dispose();
}
return null;
}
}
public static string GetContactMessageHistoryPath(Imps.Client.Core.User currentUser, Imps.Client.Core.Contact contact)
{
string path = Path.Combine(currentUser.PersistentManager.BaseDirForHistory, contact.Uri.ToUniqueString() + ".xml");
string text2 = Path.Combine(currentUser.PersistentManager.BaseDirForHistory, currentUser.Sid.ToString() + "_" + contact.Uri.ToUniqueString() + ".xml");
if (!File.Exists(text2) && File.Exists(path))
{
File.Move(path, text2);
}
return text2;
}
public static string GetSendMessageErrorDes(SipResponseReceivedEventArgs e, bool isMulitiConversation)
{
string text = string.Empty;
int statusCode = e.Response.Message.StatusCode;
if (statusCode <= 0x19d)
{
switch (statusCode)
{
case 0x194:
text = "接收方不存在";
if (!isMulitiConversation)
{
text = text + string.Format(",可能对方已经退订了{0}服务!", AppDictionary.ShortEnglishName);
}
return text;
case 0x195:
return text;
case 410:
return text;
case 0x19d:
return text;
}
return text;
}
if (statusCode != 0x1e6)
{
if (statusCode != 500)
{
if (statusCode != 520)
{
return text;
}
return "对方离线消息存储空间满!";
}
}
else
{
text = "您今天发送短信的数量超过限额!";
try
{
if (!string.IsNullOrEmpty(e.Response.Message.Body.Trim()))
{
XmlDocument document = new XmlDocument();
document.LoadXml(e.Response.Message.Body.Trim());
if (document.DocumentElement.ChildNodes[0].Attributes[0].Value == "sms-monthly-limit")
{
text = "您这个月发送短信的数量超过限额!";
}
}
}
catch (Exception exception)
{
ClientLogger.WriteException(exception);
}
return text;
}
return "服务器内部错误 请稍后重试!";
}
public static string GetShareContentOptionString()
{
if (_scOptionString == null)
{
ShareContentType shareContentType = Imps.Client.Core.Configuration.FixedClientSetting.ShareContentType;
if (shareContentType == ShareContentType.All)
{
_scOptionString = "block;relay;p2p;p2pV2;relayV2";
}
else
{
StringBuilder builder = new StringBuilder();
builder.Append("block;p2p");
if ((shareContentType & ShareContentType.RelayAndBlock) != ShareContentType.None)
{
builder.Append(";relay;relayV2");
}
if ((shareContentType & ShareContentType.P2P) != ShareContentType.None)
{
builder.Append(";p2pV2");
}
_scOptionString = builder.ToString();
}
}
return _scOptionString;
}
public Imps.Client.Core.Conversation OpenConversation(List<Imps.Client.Core.Contact> contacts)
{
return this.OpenConversation(null, contacts);
}
public Imps.Client.Core.Conversation OpenConversation(Imps.Client.Core.Contact contact)
{
return this.OpenConversation(contact.Uri.Raw, contact);
}
public Imps.Client.Core.Conversation OpenConversation(string to, List<Imps.Client.Core.Contact> contacts)
{
return this.OpenConversation(to, null, true, contacts);
}
public Imps.Client.Core.Conversation OpenConversation(string to, Imps.Client.Core.Contact contact)
{
List<Imps.Client.Core.Contact> contacts = new List<Imps.Client.Core.Contact>();
contacts.Add(contact);
return this.OpenConversation(to, null, true, contacts);
}
internal Imps.Client.Core.Conversation OpenConversation(string to, long? callId, bool invite, List<Imps.Client.Core.Contact> contacts)
{
Imps.Client.Core.Conversation conv = new Imps.Client.Core.Conversation(base.Owner, callId);
this.Conversations.Add(conv);
Dialog item = new Dialog(conv);
item.To = to;
if (contacts.get_Count() == 1)
{
item.InnerAddParticipants(new Imps.Client.Core.Contact[] { contacts.get_Item(0) });
item.IsMulitiConversation = false;
}
if (invite)
{
if (contacts.get_Count() > 1)
{
for (int i = contacts.get_Count() - 1; i >= 0; i--)
{
if (!contacts.get_Item(i).EnableMultiIM)
{
contacts.Remove(contacts.get_Item(i));
}
}
}
if (contacts.get_Count() != 0)
{
item.Status = DialogStatus.Inviting;
if (contacts.get_Count() == 1)
{
item.To = contacts.get_Item(0).Uri.Raw;
if (contacts.get_Item(0).EnableInvite)
{
item.AsyncSendInvite();
}
else
{
item.Status = DialogStatus.None;
}
}
else
{
item.IsMulitiConversation = true;
conv.AsyncCreateTemporaryGroup(contacts);
}
}
}
conv.Dialogs.Add(item);
return conv;
}
internal Imps.Client.Core.Conversation OpenConversation(string to, long? callId, bool invite, Imps.Client.Core.Contact contact)
{
List<Imps.Client.Core.Contact> contacts = new List<Imps.Client.Core.Contact>();
contacts.Add(contact);
return this.OpenConversation(to, callId, invite, contacts);
}
private void Owner_MessageReceived(object sender, SipRequestReceivedEventArgs e)
{
try
{
switch (e.Request.Message.Method)
{
case "I":
this.DoReceiveInvite(e.Request);
return;
case "M":
break;
default:
return;
}
this.DoReceiveMessage(e.Request);
}
catch (Exception exception)
{
ClientLogger.WriteException(exception);
}
}
private void owner_StatusChanged(object sender, UserSatusChangedEventArgs e)
{
switch (e.NewStatus)
{
case UserAccountStatus.Logoff:
case UserAccountStatus.Disconnected:
case UserAccountStatus.None:
this.Clear();
return;
}
}
internal void RaiseFindConversationForm(Imps.Client.Core.Conversation conv, Imps.Client.Core.Contact contact, string message)
{
if ((this.FindConversationForm != null) && ((conv != null) && (conv.CurrentDialog != null)))
{
conv.CurrentDialog.WaitReceiveRequest();
try
{
AutoResetEvent auto = new AutoResetEvent(false);
FuncDispatcher.InvokeEventHandlerInUiThread<FindConversationFormEventArgs>(this, this.FindConversationForm, new FindConversationFormEventArgs(conv, auto, contact, message));
auto.WaitOne(0x7530, true);
}
finally
{
conv.CurrentDialog.ResumeReceiveRequest();
}
}
}
internal void RegisterKeepAlive()
{
if (!GlobalTimer.IsHandlerRegistered(new EventHandler(this.AsyncSendKeepAlive)))
{
GlobalTimer.Register(new EventHandler(this.AsyncSendKeepAlive), 0xbb8);
}
}
public List<Imps.Client.Core.Conversation> Conversations
{
get
{
return this._conversations;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -