aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Server/LegionManager.cs
blob: 27170f9753d0cfcf5f0e47d89e6de1b228d82a35 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using ShiftOS.Objects;
using static ShiftOS.Server.Program;
using NetSockets;

namespace ShiftOS.Server
{
    public static class LegionManager
    {
        [MudRequest("legion_createnew", typeof(Legion))]
        public static void CreateLegion(string guid, object contents)
        {
            List<Legion> legions = new List<Legion>();
            if (File.Exists("legions.json"))
                legions = JsonConvert.DeserializeObject<List<Legion>>(File.ReadAllText("legions.json"));

            var l = contents as Legion;
            bool legionExists = false;

            foreach (var legion in legions)
            {
                if (legion.ShortName == l.ShortName)
                    legionExists = true;
            }

            if (legionExists == false)
            {
                legions.Add(l);
                server.DispatchTo(new Guid(guid), new NetObject("test", new ServerMessage
                {
                    Name = "legion_create_ok",
                    GUID = "server"
                }));

            }
            else
            {
                server.DispatchTo(new Guid(guid), new NetObject("test", new ServerMessage
                {
                    Name = "legion_alreadyexists",
                    GUID = "server"
                }));
            }

            File.WriteAllText("legions.json", JsonConvert.SerializeObject(legions, Formatting.Indented));

        }

        [MudRequest("legion_get_all", null)]
        public static void GetAllLegions(string guid, object contents)
        {
            List<Legion> allLegions = new List<Legion>();

            if (File.Exists("legions.json"))
                allLegions = JsonConvert.DeserializeObject<List<Legion>>(File.ReadAllText("legions.json"));

            server.DispatchTo(new Guid(guid), new NetObject("alllegions", new ServerMessage
            {
                Name = "legion_all",
                GUID = "server",
                Contents = JsonConvert.SerializeObject(allLegions)
            }));

        }
        
        [MudRequest("legion_get_users", typeof(Legion))]
        public static void GetLegionUsers(string guid, object contents)
        {
            var lgn = contents as Legion;

            List<string> userIDs = new List<string>();

            foreach (var savfile in Directory.GetFiles("saves"))
            {
                try
                {
                    var savefilecontents = JsonConvert.DeserializeObject<Save>(File.ReadAllText(savfile));
                    if (savefilecontents.CurrentLegions.Contains(lgn.ShortName))
                    {
                        userIDs.Add($"{savefilecontents.Username}@{savefilecontents.SystemName}");
                    }
                }
                catch { }
            }

            server.DispatchTo(new Guid(guid), new NetObject("userlist", new ServerMessage
            {
                Name = "legion_users_found",
                GUID = "server",
                Contents = JsonConvert.SerializeObject(userIDs)
            }));

        }

        [MudRequest("user_get_legion", typeof(Save))]
        public static void GetUserLegion(string guid, object contents)
        {
            var userSave = contents as Save;

            if (File.Exists("legions.json"))
            {
                var legionList = JsonConvert.DeserializeObject<List<Legion>>(File.ReadAllText("legions.json"));
                foreach (var legion in legionList)
                {
                    if (userSave.CurrentLegions.Contains(legion.ShortName))
                    {
                        server.DispatchTo(new Guid(guid), new NetObject("reply", new ServerMessage
                        {
                            Name = "user_legion",
                            GUID = "server",
                            Contents = JsonConvert.SerializeObject(legion)
                        }));
                        return;
                    }
                }
            }

            server.DispatchTo(new Guid(guid), new NetObject("fuck", new ServerMessage
            {
                Name = "user_not_found_in_legion",
                GUID = "server"
            }));

        }
    }
}