OSDN Git Service

Update copyright year
[radegast/radegast.git] / Radegast / Core / GridManager.cs
1 // 
2 // Radegast Metaverse Client
3 // Copyright (c) 2009-2014, Radegast Development Team
4 // All rights reserved.
5 // 
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 // 
9 //     * Redistributions of source code must retain the above copyright notice,
10 //       this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above copyright
12 //       notice, this list of conditions and the following disclaimer in the
13 //       documentation and/or other materials provided with the distribution.
14 //     * Neither the name of the application "Radegast", nor the names of its
15 //       contributors may be used to endorse or promote products derived from
16 //       this software without specific prior written permission.
17 // 
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 //
29 // $Id$
30 //
31 using System;
32 using System.Collections.Generic;
33 using System.IO;
34 using System.Text;
35 using System.Reflection;
36 using OpenMetaverse;
37 using OpenMetaverse.StructuredData;
38
39 namespace Radegast
40 {
41     public class Grid
42     {
43         public string ID = string.Empty;
44         public string Name = string.Empty;
45         public string Platform = string.Empty;
46         public string LoginURI = string.Empty;
47         public string LoginPage = string.Empty;
48         public string HelperURI = string.Empty;
49         public string Website = string.Empty;
50         public string Support = string.Empty;
51         public string Register = string.Empty;
52         public string PasswordURL = string.Empty;
53         public string Version = "1";
54
55         public Grid() { }
56
57         public Grid(string ID, string name, string loginURI)
58         {
59             this.ID = ID;
60             this.Name = name;
61             this.LoginURI = loginURI;
62         }
63
64         public override string ToString()
65         {
66             return Name;
67         }
68
69         public static Grid FromOSD(OSD data)
70         {
71             if (data == null || data.Type != OSDType.Map) return null;
72             Grid grid = new Grid();
73             OSDMap map = (OSDMap)data;
74
75             grid.ID = map["gridnick"].AsString();
76             grid.Name = map["gridname"].AsString();
77             grid.Platform = map["platform"].AsString();
78             grid.LoginURI = map["loginuri"].AsString();
79             grid.LoginPage = map["loginpage"].AsString();
80             grid.HelperURI = map["helperuri"].AsString();
81             grid.Website = map["website"].AsString();
82             grid.Support = map["support"].AsString();
83             grid.Register = map["register"].AsString();
84             grid.PasswordURL = map["password"].AsString();
85             grid.Version = map["version"].AsString();
86
87             return grid;
88         }
89     }
90
91     public class GridManager : IDisposable
92     {
93         public List<Grid> Grids;
94
95         public GridManager()
96         {
97             Grids = new List<Grid>();
98         }
99
100         public void Dispose()
101         {
102         }
103
104         public void LoadGrids()
105         {
106             Grids.Clear();
107             Grids.Add(new Grid("agni", "Second Life (agni)", "https://login.agni.lindenlab.com/cgi-bin/login.cgi"));
108             Grids.Add(new Grid("aditi", "Second Life Beta (aditi)", "https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));
109
110             try
111             {
112                 string sysGridsFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "grids.xml");
113                 OSDArray sysGrids = (OSDArray)OSDParser.DeserializeLLSDXml(File.ReadAllText(sysGridsFile));
114                 for (int i = 0; i < sysGrids.Count; i++)
115                 {
116                     RegisterGrid(Grid.FromOSD(sysGrids[i]));
117                 }
118             }
119             catch (Exception ex)
120             {
121                 Logger.Log(string.Format("Error loading grid information: {0}", ex.Message), Helpers.LogLevel.Warning);
122             }
123         }
124
125         public void RegisterGrid(Grid grid)
126         {
127             int ix = Grids.FindIndex((Grid g) => { return g.ID == grid.ID; });
128             if (ix < 0)
129             {
130                 Grids.Add(grid);
131             }
132             else
133             {
134                 Grids[ix] = grid;
135             }
136         }
137
138         public Grid this[int ix]
139         {
140             get { return Grids[ix]; }
141         }
142
143         public Grid this[string gridID]
144         {
145             get
146             {
147                 foreach (Grid grid in Grids)
148                 {
149                     if (grid.ID == gridID) return grid;
150                 }
151                 throw new KeyNotFoundException();
152             }
153         }
154
155         public bool KeyExists(string gridID)
156         {
157             foreach (Grid grid in Grids)
158             {
159                 if (grid.ID == gridID) return true;
160             }
161             return false;
162         }
163
164         public int Count
165         {
166             get { return Grids.Count; }
167         }
168     }
169 }