public void Reconnect() { messageCount = 0; lastRecieveTime = DateTime.Now; State = ChatRoomState.Disconnected; var users = this.Users.ToList(); this.Users = new List <User>(); this.AdminList = new List <User>(); this.OwnerList = new List <User>(); this.ModeratorList = new List <User>(); this.VoiceList = new List <User>(); if (this.IsGroupChat) { this.client.MucManager.JoinRoom(this.GroupUser.JidUser, this.client.Me.UserName); this.client.MucManager.RequestModeratorList(this.GroupUser.JidUser); this.client.MucManager.RequestAdminList(this.GroupUser.JidUser); this.client.MucManager.RequestOwnerList(this.GroupUser.JidUser); this.client.MucManager.RequestVoiceList(this.GroupUser.JidUser); State = ChatRoomState.Connecting; this.AddUser(this.client.Me); } else { State = ChatRoomState.Connecting; foreach (var u in users) { this.AddUser(u); } } }
protected virtual void FireOnStateChanged(ChatRoomState oldstate, ChatRoomState newstate) { var handler = this.OnStateChanged; if (handler != null) { handler(this, oldstate, newstate); } }
/// <summary> /// The add user. /// </summary> /// <param name="user"> /// The user. /// </param> /// <param name="inviteUser"> /// The invite user. /// </param> public void AddUser(User user, bool inviteUser = true) { if (this.State == ChatRoomState.Connecting) { this.State = ChatRoomState.GettingUsers; } if (!this.Users.Contains(user)) { this.Users.Add(user); } if (this.Users.Count > 2 || this.IsGroupChat) { if (!this.IsGroupChat) { this.IsGroupChat = true; string rname = Randomness.RandomRoomName(); this.GroupUser = new User(rname + "@conference." + this.client.Config.ChatHost); this.client.MucManager.JoinRoom(this.GroupUser.JidUser, this.client.Me.UserName); //this.client.MucManager.AcceptDefaultConfiguration(this.GroupUser.JidUser); this.client.MucManager.JoinRoom(this.GroupUser.JidUser, this.client.Me.UserName); this.client.RosterManager.AddRosterItem(this.GroupUser.JidUser, this.GroupUser.UserName); } if (inviteUser) { foreach (var u in this.Users) { if (u != this.client.Me) { this.client.MucManager.Invite(u.JidUser, this.GroupUser.JidUser); } } } } this.FireUpdateList(); }
/// <summary> /// The on message. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="msg"> /// The message. /// </param> public void OnMessage(object sender, Message msg) { bool gotMessage = false; var remoteTime = DateTime.Now; if (msg.XDelay != null) { remoteTime = msg.XDelay.Stamp.ToLocalTime(); } switch (msg.Type) { case MessageType.normal: break; case MessageType.error: if (msg.Error != null && !string.IsNullOrWhiteSpace(msg.Error.ErrorText)) { this.OnMessageReceived.Invoke( this, msg.Id, new User(msg.From), msg.Error.ErrorText, DateTime.Now, LobbyMessageType.Error); } break; case MessageType.chat: switch (msg.Chatstate) { case Chatstate.None: if (!this.IsGroupChat && !string.IsNullOrWhiteSpace(msg.Body) && this.OnMessageReceived != null && this.Users.Contains(new User(msg.From.Bare))) { gotMessage = true; this.OnMessageReceived.Invoke(this, msg.Id, new User(msg.From.Bare), msg.Body, remoteTime); } break; case Chatstate.active: break; case Chatstate.inactive: break; case Chatstate.composing: break; case Chatstate.gone: break; case Chatstate.paused: break; } break; case MessageType.groupchat: if (this.IsGroupChat && msg.Chatstate == Chatstate.None) { if (msg.From.Bare == this.GroupUser.FullUserName) { if (!string.IsNullOrWhiteSpace(msg.Subject)) { if (this.OnMessageReceived != null) { gotMessage = true; this.OnMessageReceived.Invoke( this, msg.Id, new User(new Jid(msg.From.Resource + "@" + this.client.Config.ChatHost)), msg.Subject, remoteTime, LobbyMessageType.Topic); } } else if (msg.From.Resource != "triadx" && this.client.Ignorees.Contains(new User(new Jid(msg.From.Resource + "@" + this.client.Config.ChatHost)))) { return; } else if (!string.IsNullOrWhiteSpace(msg.Body)) { if (this.OnMessageReceived != null) { gotMessage = true; this.OnMessageReceived.Invoke( this, msg.Id, new User(new Jid(msg.From.Resource + "@" + this.client.Config.ChatHost)), msg.Body, remoteTime); } } } } break; case MessageType.headline: break; } if (gotMessage) { if (this.State == ChatRoomState.GettingUsers) { this.State = ChatRoomState.GettingHistory; } else if (this.State == ChatRoomState.GettingHistory) { if (messageCount >= 5) { this.State = ChatRoomState.Connected; } } lastRecieveTime = DateTime.Now; messageCount++; } }
private void RoomOnOnStateChanged(object sender, ChatRoomState oldState, ChatRoomState newState) { RoomState = newState; }