Example #1
0
        public static void Initiate(string mud_address, int port)
        {
            client = new NetObjectClient();

            client.OnReceived += (o, a) =>
            {
                var msg = a.Data.Object as ServerMessage;
                if (msg.Name == "Welcome")
                {
                    thisGuid = new Guid(msg.Contents);
                    GUIDReceived?.Invoke(msg.Contents);
                }
                else if (msg.Name == "broadcast")
                {
                    Console.WriteLine(msg.Contents);
                }
                else if (msg.Name == "Error")
                {
                    var ex = JsonConvert.DeserializeObject <Exception>(msg.Contents);
                    TerminalBackend.PrefixEnabled = true;
                    Console.WriteLine($@"{{MUD_ERROR}}: {ex.Message}");
                    TerminalBackend.PrefixEnabled = true;
                    Console.Write($"{SaveSystem.CurrentSave.Username}@{CurrentSave.SystemName}:~$ ");
                }
                else
                {
                    MessageReceived?.Invoke(msg);
                }
            };

            client.Connect(mud_address, port);
        }
Example #2
0
        private static void ServerManager_MessageReceived(ServerMessage msg)
        {
            switch (msg.Name)
            {
            case "getguid_fromserver":
                if (SaveSystem.CurrentUser.Username == msg.Contents)
                {
                    client.Send(new NetObject("yes_i_am", new ServerMessage
                    {
                        Name     = "getguid_reply",
                        GUID     = msg.GUID,
                        Contents = thisGuid.ToString(),
                    }));
                }
                break;

            case "msgtosys":
                try
                {
                    var m = JsonConvert.DeserializeObject <ServerMessage>(msg.Contents);
                    if (m.GUID.Split('|')[2] != thisGuid.ToString())
                    {
                        delegateToServer(m);
                    }
                }
                catch { }
                break;

            case "getguid_reply":
                GUIDReceived?.Invoke(msg.Contents);
                break;
            }
        }
Example #3
0
        private static void ServerManager_MessageReceived(ServerMessage msg)
        {
            switch (msg.Name)
            {
            case "mudhack_users":
                UsersReceived?.Invoke(JsonConvert.DeserializeObject <List <OnlineUser> >(msg.Contents));
                break;

            case "mudhack_init":
                ServerPasswordGenerated?.Invoke(msg.Contents);
                break;

            case "mudhack_denied":
                ServerAccessDenied?.Invoke();
                break;

            case "mudhack_granted":
                ServerAccessGranted?.Invoke();
                break;

            case "getguid_fromserver":
                if (SaveSystem.CurrentSave.Username == msg.Contents)
                {
                    client.Send(new NetObject("yes_i_am", new ServerMessage
                    {
                        Name     = "getguid_reply",
                        GUID     = msg.GUID,
                        Contents = thisGuid.ToString(),
                    }));
                }
                break;

            case "getguid_reply":
                GUIDReceived?.Invoke(msg.Contents);
                break;
            }
        }
Example #4
0
        /// <summary>
        /// Initiate a new Digital Society connection.
        /// </summary>
        /// <param name="mud_address">The IP address or hostname of the target server</param>
        /// <param name="port">The target port.</param>
        public static void Initiate(string mud_address, int port)
        {
            client = new NetObjectClient();
            client.OnDisconnected += (o, a) =>
            {
                if (!UserDisconnect)
                {
                    Desktop.PushNotification("digital_society_connection", "Disconnected from Digital Society.", "The ShiftOS kernel has been disconnected from the Digital Society. We are attempting to re-connect you.");
                    TerminalBackend.PrefixEnabled = true;
                    ConsoleEx.ForegroundColor     = ConsoleColor.Red;
                    ConsoleEx.Bold = true;
                    Console.Write($@"Disconnected from MUD: ");
                    ConsoleEx.Bold            = false;
                    ConsoleEx.Italic          = true;
                    ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine("You have been disconnected from the multi-user domain for an unknown reason. Your save data is preserved within the kernel and you will be reconnected shortly.");
                    TerminalBackend.PrefixEnabled = true;
                    TerminalBackend.PrintPrompt();
                    Initiate(mud_address, port);
                }
            };
            client.OnReceived += (o, a) =>
            {
                if (PingTimer.IsRunning)
                {
                    DigitalSocietyPing = PingTimer.ElapsedMilliseconds;
                    PingTimer.Reset();
                }
                var msg = a.Data.Object as ServerMessage;
                if (msg.Name == "Welcome")
                {
                    thisGuid = new Guid(msg.Contents);
                    GUIDReceived?.Invoke(msg.Contents);
                    guidReceiveARE.Set();
                    TerminalBackend.PrefixEnabled = true;
                    TerminalBackend.PrintPrompt();
                }
                else if (msg.Name == "allusers")
                {
                    foreach (var acc in JsonConvert.DeserializeObject <string[]>(msg.Contents))
                    {
                        Console.WriteLine(acc);
                    }
                    TerminalBackend.PrintPrompt();
                }
                else if (msg.Name == "update_your_cp")
                {
                    var args = JsonConvert.DeserializeObject <Dictionary <string, object> >(msg.Contents);
                    if (args["username"] as string == SaveSystem.CurrentUser.Username)
                    {
                        SaveSystem.CurrentSave.Codepoints += (ulong)args["amount"];
                        Desktop.InvokeOnWorkerThread(new Action(() =>
                        {
                            Infobox.Show($"MUD Control Centre", $"Someone bought an item in your shop, and they have paid {args["amount"]}, and as such, you have been granted these Codepoints.");
                        }));
                        SaveSystem.SaveGame();
                    }
                }
                else if (msg.Name == "broadcast")
                {
                    Console.WriteLine(msg.Contents);
                }
                else if (msg.Name == "forward")
                {
                    MessageReceived?.Invoke(JsonConvert.DeserializeObject <ServerMessage>(msg.Contents));
                }
                else if (msg.Name == "Error")
                {
                    var ex = JsonConvert.DeserializeObject <Exception>(msg.Contents);
                    TerminalBackend.PrefixEnabled = true;
                    ConsoleEx.ForegroundColor     = ConsoleColor.Red;
                    ConsoleEx.Bold = true;
                    Console.Write($@"{{MUD_ERROR}}: ");
                    ConsoleEx.Bold            = false;
                    ConsoleEx.Italic          = true;
                    ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine(ex.Message);
                    TerminalBackend.PrefixEnabled = true;
                    TerminalBackend.PrintPrompt();
                }
                else
                {
                    MessageReceived?.Invoke(msg);
                }
            };

            try
            {
                client.Connect(mud_address, port);
            }
            catch (SocketException ex)
            {
                System.Diagnostics.Debug.Print(ex.ToString());
                Initiate(mud_address, port);
            }
        }