public NetworkState(NodeInfo info) { this.knownConnections = info.KnownConnections; this.knownChatRooms = info.KnownChatRooms; this.knownMemos = info.KnownMemos; }
public Message CreateMyInfoMessage(Node MessageTo) { Message p = new Message(network, MessageType.MyInfo); p.To = MessageTo.NodeID; TrustedNodeInfo t = network.TrustedNodes[MessageTo.NodeID]; NodeInfo nodeInfo = new NodeInfo(); nodeInfo.NodeID = network.LocalNode.NodeID; nodeInfo.NickName = network.LocalNode.NickName; nodeInfo.AvatarSize = network.LocalNode.AvatarSize; if (MessageTo.IsConnectedLocally == true || t.AllowNetworkInfo == true) { nodeInfo.DestinationInfos = Core.DestinationManager.DestinationInfos; } if (t.AllowProfile == true) { nodeInfo.RealName = network.LocalNode.RealName; nodeInfo.Email = network.LocalNode.Email; } nodeInfo.ClientName = network.LocalNode.ClientName; nodeInfo.ClientVersion = network.LocalNode.ClientVersion; if (t.AllowSharedFiles == true) { nodeInfo.Bytes = network.LocalNode.Bytes; nodeInfo.Files = network.LocalNode.Files; } List<ConnectionInfo> connections = new List<ConnectionInfo>(); List<ChatRoomInfo> rooms = new List<ChatRoomInfo>(); List<MemoInfo> memos = new List<MemoInfo>(); foreach (INodeConnection con in network.Connections) { if (con.NodeLocal != MessageTo & con.NodeRemote != MessageTo) { if (con.ConnectionState == ConnectionState.Ready | con.ConnectionState == ConnectionState.Remote) { ConnectionInfo n = new ConnectionInfo(); Node ConnectionSourceNode = con.NodeLocal; Node ConnectionDestNode = con.NodeRemote; n.SourceNodeID = ConnectionSourceNode.NodeID; n.SourceNodeNickname = ConnectionSourceNode.NickName; n.DestNodeID = ConnectionDestNode.NodeID; n.DestNodeNickname = ConnectionDestNode.NickName; connections.Add (n); } } } foreach (ChatRoom currentRoom in network.ChatRooms) { ChatRoomInfo roomInfo = new ChatRoomInfo(); roomInfo.Id = currentRoom.Id; roomInfo.Name = currentRoom.Name; roomInfo.Users = new string[currentRoom.Users.Count]; int x = 0; foreach (Node node in currentRoom.Users.Values) { roomInfo.Users[x] = node.NodeID; x ++; } rooms.Add(roomInfo); } foreach (Memo currentMemo in network.Memos) { if (Core.IsLocalNode(currentMemo.Node)) { MemoInfo info = new MemoInfo(currentMemo); memos.Add(info); } } nodeInfo.KnownConnections = connections.ToArray(); nodeInfo.KnownChatRooms = rooms.ToArray(); nodeInfo.KnownMemos = memos.ToArray(); p.Content = nodeInfo; return p; }
internal void ProcessMyInfoMessage(Node currentNode, NodeInfo nodeInfo) { string oldNick = currentNode.NickName; currentNode.Bytes = nodeInfo.Bytes; currentNode.ClientName = nodeInfo.ClientName; currentNode.ClientVersion = nodeInfo.ClientVersion; currentNode.Email = nodeInfo.Email; currentNode.Files = nodeInfo.Files; //currentNode.HostInfo = nodeInfo.HostInfo; currentNode.NickName = nodeInfo.NickName; currentNode.RealName = nodeInfo.RealName; currentNode.AvatarSize = nodeInfo.AvatarSize; TrustedNodeInfo tNode = network.TrustedNodes[currentNode.NodeID]; tNode.Identifier = currentNode.NickName; tNode.DestinationInfos.Clear(); tNode.DestinationInfos.AddRange(nodeInfo.DestinationInfos); Core.Settings.SyncNetworkInfoAndSave(); /* IDirectory userDirectory = network.Directory.GetSubdirectory(currentNode.NodeID); if (userDirectory != null) { userDirectory.Delete(); } network.Directory.CreateSubdirectory(currentNode.NodeID, currentNode); */ network.RaiseUpdateNodeInfo(oldNick, currentNode); network.AppendNetworkState(new NetworkState(nodeInfo)); }