Inheritance: Object
        public ChatRoomInvitationDialog(Network network, Node inviteFrom, ChatRoom room, ChatInviteInfo invitation)
            : base("ChatRoomInvitationDialog")
        {
            this.room = room;
            this.invitation = invitation;

            descLabel.Markup = String.Format(descLabel.Text, GLib.Markup.EscapeText(inviteFrom.ToString()), GLib.Markup.EscapeText(room.Name));

            messageContainer.Visible = !String.IsNullOrEmpty(invitation.Message);
            messageLabel.Text = GLib.Markup.EscapeText(invitation.Message);

            passwordInfoBox.Visible = room.HasPassword;

            passwordEntry.Text = invitation.Password;
            showPasswordCheck.Visible = !String.IsNullOrEmpty(invitation.Password);

            Validate();
        }
示例#2
0
        public ChatRoomSubpage(ChatRoom room)
            : base()
        {
            this.thisRoom = room;
            this.network = room.Network;

            userListStore = new ListStore (typeof (Node));
            userList.Model = userListStore;

            var iconCell = new CellRendererPixbuf();
            var textCell = new CellRendererText();

            var column = new TreeViewColumn();
            column.PackStart(iconCell, false);
            column.SetCellDataFunc(iconCell, new TreeCellDataFunc(UserListIconFunc));

            column.PackStart(textCell, true);
            column.SetCellDataFunc(textCell, new TreeCellDataFunc (UserListTextFunc));

            userList.AppendColumn(column);

            userList.HeadersVisible = false;
            userList.RowActivated += on_userList_RowActivated;
            userList.ButtonReleaseEvent +=  on_userList_button_release_event;

            foreach (Node n in room.Users.Values) {
                userListStore.AppendValues (n);
            }

            AddToChat (null, String.Format ("You have joined {0}.", thisRoom.Name));

            if (room.HasPassword) {
                AddToChat (null, "This chatroom is password-protected. Other users on the network who do not have the password are not able to evesdrop on the conversation.\n");
            } else {
                AddToChat (null, "This chatroom is not password-protected. Other users on the network are able to evesdrop on the conversation, regardless of if they appear to be in the room or not.\n");
            }

            base.SendMessage += base_SendMessage;
        }
示例#3
0
        internal void AppendNetworkState(NetworkState stateObject)
        {
            if (stateObject.KnownConnections != null) {
                foreach (ConnectionInfo connection in stateObject.KnownConnections) {
                    this.ProcessNewConnection (connection);
                }
            }

            if (stateObject.KnownChatRooms != null) {
                foreach (ChatRoomInfo roomInfo in stateObject.KnownChatRooms) {
                    lock (chatRooms) {
                        if (!chatRooms.ContainsKey(roomInfo.Id)) {
                            ChatRoom newRoom = new ChatRoom(this, roomInfo);
                            AddChatRoom(newRoom);
                        }
                    }

                    ChatRoom realRoom = chatRooms[roomInfo.Id];

                    foreach (string nodeId in roomInfo.Users) {
                        Node currentNode = GetNode(nodeId);
                        if (currentNode != null) {
                            if (!realRoom.Users.ContainsKey(currentNode.NodeID)) {
                                if (currentNode.NodeID == Core.MyNodeID) {
                                    // err.. but.. i'm not in here!!
                                    LoggingService.LogWarning("Someone thought I was in {0} but I'm not!!", realRoom.Name);
                                    this.LeaveChat(realRoom);

                                } else {
                                    realRoom.AddUser(currentNode);
                                    OnJoinedChat (new ChatEventArgs (currentNode, realRoom));
                                }
                            }
                        } else {
                            LoggingService.LogWarning("TRIED TO ADD NON-EXISTANT NODE {0} TO CHATROOM {1}", nodeId, roomInfo.Name);
                        }
                    }
                }
            }

            if (stateObject.KnownMemos != null) {
                foreach (MemoInfo memoInfo in stateObject.KnownMemos) {
                    lock (memos) {
                        if (memos.ContainsKey(memoInfo.ID)) {
                            Memo existingMemo = memos[memoInfo.ID];
                            existingMemo.Subject = memoInfo.Subject;
                            existingMemo.Text = memoInfo.Text;
                            OnMemoUpdated (existingMemo);
                        } else {
                            Memo memo = new Memo (this, memoInfo);
                            AddMemo(memo);
                        }
                    }
                }
            }
        }
示例#4
0
 internal void AddChatRoom(ChatRoom room)
 {
     lock (chatRooms) {
         chatRooms.Add(room.Id, room);
     }
 }
示例#5
0
 public void SendChatMessage(ChatRoom room, string messageText)
 {
     if (room.InRoom == true) {
         if (room.HasPassword) {
             byte[] saltBytes = System.Text.Encoding.UTF8.GetBytes(room.Id);
             SendBroadcast(MessageBuilder.CreateChatMessageMessage(room, Security.Encryption.PasswordEncrypt(room.Password, messageText, saltBytes)), LocalNode);
         } else {
             SendBroadcast(MessageBuilder.CreateChatMessageMessage(room, messageText), LocalNode);
         }
     } else {
         throw new Exception("You cannot send messages to chatrooms that you are not in");
     }
 }
示例#6
0
        internal void ProcessChatMessage(Node messageFrom, ChatMessage message)
        {
            ChatRoom c = network.GetChatRoom(message.RoomId);

            if (messageFrom != null) {

                if (c == null) {
                    c = new ChatRoom (network, message.RoomId, message.RoomName);
                    network.AddChatRoom(c);
                    LoggingService.LogWarning("MessageProcessor: Assuming chat room {0} exists and that somebody will be joining it in a moment...", c.Name);
                }

                if (!c.Users.ContainsKey(messageFrom.NodeID)) {
                    LoggingService.LogWarning("MessageProcessor: Assuming {0} is in {1}...", messageFrom.NickName, c.Name);
                    c.AddUser(messageFrom);

                    network.RaiseJoinedChat (messageFrom, c);
                }
                if (c.InRoom == true) {
                    string messageText = message.Message;
                    if (c.HasPassword) {
                        try {
                            byte[] saltBytes = System.Text.Encoding.UTF8.GetBytes(c.Id);
                            messageText = Security.Encryption.PasswordDecrypt(c.Password, messageText, saltBytes);
                        } catch (Exception) {
                            messageText = "<UNABLE TO DECRYPT MESSAGE>";
                        }
                    }
                    network.RaiseChatMessage (c, messageFrom, messageText);
                }
            } else {
                throw new Exception("A chat message was Received from a non existing user! (NodeID: " + messageFrom + ")");
            }
        }
示例#7
0
 public Message CreateChatInviteMessage(Node messageTo, ChatRoom room, string message, string password)
 {
     Message p = new Message(network, MessageType.ChatInvite);
     p.To = messageTo.NodeID;
     ChatInviteInfo c = new ChatInviteInfo();
     c.RoomId = room.Id;
     c.RoomName = room.Name;
     c.Message = message;
     c.Password = password;
     p.Content = c;
     return p;
 }
示例#8
0
 public Message CreateChatMessageMessage(ChatRoom room, string messageText)
 {
     Message p = new Message(network, MessageType.ChatroomMessage);
     ChatMessage c = new ChatMessage();
     c.RoomId = room.Id;
     c.RoomName = room.Name;
     c.Message = messageText;
     //		p.To = "";
     p.Content = c;
     return p;
 }
示例#9
0
        public void JoinChat(ChatRoom room, string password)
        {
            if (!room.TestPassword(password))
                throw new ArgumentException("Incorrect password");

            room.Password = password;

            JoinChat(room);
        }
示例#10
0
 internal void RemoveChatRoom(ChatRoom room)
 {
     lock (chatRooms) {
         chatRooms.Remove(room.Id);
     }
 }
示例#11
0
 internal void RaiseLeftChat(Node node, ChatRoom room)
 {
     OnLeftChat (new ChatEventArgs (node, room));
 }
示例#12
0
 internal void RaiseJoinedChat(Node node, ChatRoom room)
 {
     OnJoinedChat (new ChatEventArgs (node, room));
 }
示例#13
0
        /*
        internal void RaiseFileOffered (Node messageFrom, SharedFileInfo file)
        {
            OnFileOffered (new FileOfferedEventArgs (messageFrom, file));
        }

        protected virtual void OnFileOffered (FileOfferedEventArgs args)
        {
            if (FileOffered != null) {
                FileOffered (this, args);
            }
        }
        */
        internal void RaiseChatMessage(ChatRoom room, Node messageFrom, string messageText)
        {
            if (ChatMessage != null)
                ChatMessage(room, messageFrom, messageText);
        }
示例#14
0
        internal void ProcessJoinChatMessage(Node messageFrom, ChatAction action)
        {
            if (action.RoomName != null && action.RoomName.StartsWith("#")) {
                ChatRoom c;
                if (!network.HasChatRoom(action.RoomId)) {
                    c = new ChatRoom(network, action.RoomId, action.RoomName);
                    network.AddChatRoom(c);
                } else {
                    c = network.GetChatRoom(action.RoomId);
                }

                if (!c.Users.ContainsKey(messageFrom.NodeID)) {
                    c.AddUser(messageFrom);
                    network.RaiseJoinedChat (messageFrom, c);
                }

            //	Node n = network.Nodes[action.NodeID];
            //	if (n != null) {
            //		if (c.Users[n.NodeID] == null) {
            //			c.Users.Add(n);
            //			network.RaiseJoinedChat (n, c);
            //		}
            //	} else {
            //
            //	}
            }
        }
示例#15
0
 private void network_ChatMessage(ChatRoom room, Node node, string text)
 {
     try {
         if (room.InRoom == true) {
             (room.Properties["Window"] as ChatRoomSubpage).AddToChat (node, text);
         }
     } catch (Exception ex) {
         LoggingService.LogError(ex);
         Gui.ShowErrorDialog (ex.ToString(), Gui.MainWindow.Window);
     }
 }
示例#16
0
        /*
        private void network_FileOffered (Network network, FileOfferedEventArgs args)
        {
            try {
                LogManager.Current.WriteToLog (args.From.NickName + " offers to send you " + args.File.FileName);

                MessageDialog dialog = new MessageDialog (null,
                        DialogFlags.Modal,
                        Gtk.MessageType.Question,
                        ButtonsType.YesNo,
                        "{0} would like to send you the following file:\n\n{1}\n\nDo you want to accept it?",
                        args.From.ToString(),
                        args.File.FileName);

                dialog.Show ();

                if (dialog.Run() == (int)Gtk.ResponseType.Yes) {
                    //network.DownloadFile (args.From, args.File.FileFullPath, args.File.File.Size);
                }

                dialog.Destroy ();
            } catch (Exception ex) {
                LoggingService.LogError(ex);
                Gui.ShowErrorDialog (ex.ToString(), Gui.MainWindow.Window);
            }
        }
        */
        private void network_ReceivedChatInvite(Network network, Node inviteFrom, ChatRoom room, ChatInviteInfo invitation)
        {
            try {
                ChatRoomInvitationDialog dialog = new ChatRoomInvitationDialog (network, inviteFrom, room, invitation);
                dialog.Show ();
            } catch (Exception ex) {
                LoggingService.LogError(ex);
                Gui.ShowErrorDialog (ex.ToString(), Gui.MainWindow.Window);
            }
        }
示例#17
0
        public void JoinChat(ChatRoom room)
        {
            if (room == null) {
                throw new ArgumentNullException ("room");
            }

            lock (chatRooms) {
                if (!room.Users.ContainsKey(this.LocalNode.NodeID)) {
                    room.AddUser(this.LocalNode);
                    SendBroadcast(MessageBuilder.CreateJoinChatMessage(room), this.LocalNode);
                    OnJoinedChat(new ChatEventArgs(this.LocalNode, room));
                } else {
                    throw new Exception("Already in room");
                }
            }
        }
示例#18
0
 public ChatEventArgs(Node node, ChatRoom room)
 {
     this.node = node;
     this.room = room;
 }
示例#19
0
 public void JoinOrCreateChat(string name, string password)
 {
     string roomId = String.IsNullOrEmpty(password) ? Common.SHA512Str(name) : Common.SHA512Str(name + password);
     lock (chatRooms) {
         ChatRoom room = null;
         if (chatRooms.ContainsKey(roomId)) {
             room = chatRooms[roomId];
         } else {
             room = new ChatRoom(this, roomId, name);
             AddChatRoom(room);
         }
         JoinChat(room, password);
     }
 }
示例#20
0
 public Message CreateLeaveChatMessage(ChatRoom room)
 {
     Message p = new Message(network, MessageType.LeaveChat);
     ChatAction c = new ChatAction();
     c.RoomId = room.Id;
     c.RoomName = room.Name;
     p.Content = c;
     return p;
 }
示例#21
0
        /*

        internal void JoinChat(string roomId, string roomName)
        {
            JoinChat(roomId, roomName, null);
        }

        internal void JoinChat(string roomName, string roomId, string password)
        {
            lock (chatRooms) {
                ChatRoom room;
                if (!chatRooms.ContainsKey(roomId)) {
                    room = new ChatRoom (this, roomId, roomName);
                    AddChatRoom(c);
                } else {
                    c = chatRooms[roomId];
                    if (c.PasswordTest == "") {
                        throw new Exception("That chatroom is not password-protected.");
                    }
                    if (c.TestPassword(password) == false) {
                        throw new PasswordIncorrectException();
                    }
                }
            }

            c.Password = password;
            if (!c.Users.ContainsKey(LocalNode.NodeID)) {
                c.AddUser(LocalNode);
                SendBroadcast(MessageBuilder.CreateJoinChatMessage(c.Name), LocalNode);
                OnJoinedChat (new ChatEventArgs (LocalNode, c));
            }
        }

        */
        public void LeaveChat(ChatRoom room)
        {
            SendBroadcast(MessageBuilder.CreateLeaveChatMessage(room), LocalNode);
            room.RemoveUser(LocalNode);
            OnLeftChat (new ChatEventArgs (LocalNode, room));
            if (room.Users.Count == 0) {
                RemoveChatRoom(room);
            }
        }
示例#22
0
 public void SendChatInvitation(Node node, ChatRoom room, string message, string password)
 {
     Message m = MessageBuilder.CreateChatInviteMessage(node, room, message, password);
     SendRoutedMessage (m);
 }
示例#23
0
 public JoinChatroomDialog(Window parent, ChatRoom room)
     : this(parent)
 {
     roomNameCombo.Entry.Text = room.Name;
     roomNameCombo.Sensitive = false;
 }