internal byte[] GetRawUpdate() { OutgoingMessage Message = new OutgoingMessage(); Message.AppendBoolean(true); // TODO: Find out what this does Message.AppendUInt32(this.fUser.GetID()); // User ID Message.AppendString(this.fUser.GetUsername()); // Username Message.AppendBoolean(true); // Not sure what this does Message.AppendBoolean(this.fUser.IsLoggedIn()); // Logged In Message.AppendBoolean(this.fUser.GetRoom() != null); // In Room Message.AppendString(this.fUser.GetFigure()); // Figure Message.AppendUInt32(this.fLocalCategory); // Category ID if (this.fUser.IsLoggedIn()) { Message.AppendString(this.fUser.GetMotto()); // Motto Message.AppendString(""); // Last Access (N/A) } else { Message.AppendString("Offline"); // Motto ("Offline" in this case) Message.AppendString(this.fUser.GetLastAccess().ToString()); // Last Access } return(Message.GetBytes()); }
public void SendMessage(OutgoingMessage message) { Core.GetStandardOut().PrintNotice(" [" + mID + "] <-- " + message.Header + message.GetContentString()); SendData(message.GetBytes()); }
public void ReadLoopbackWorldResponse(XmlNode node) { // WorldResponse response; string world_id = null; string update_url = null; string patcher_url = null; string hostname = null; int port = 0; List <string> world_repositories = new List <string>(); bool standalone = false; string startup_script = null; if (node.Attributes["world_id"] == null) { log.Warn("loopback_world_response element missing world_id attribute"); } else { world_id = node.Attributes["world_id"].Value; } LoopbackWorldResponse loopbackWorldResponse = new LoopbackWorldResponse(); foreach (XmlNode child in node.ChildNodes) { switch (child.Name) { case "account": if (child.Attributes["id_token"] != null) { string token = child.Attributes["id_token"].Value; loopbackWorldResponse.idToken = Convert.FromBase64String(token); } else if (child.Attributes["id_number"] != null) { string number = child.Attributes["id_number"].Value; int id = int.Parse(number); // Make an old style token for older servers loopbackWorldResponse.oldToken = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(id)); // Build a fake token to send to the login server OutgoingMessage tokenBuilder = new OutgoingMessage(); tokenBuilder.Write((byte)1); // version tokenBuilder.Write((byte)1); // type tokenBuilder.Write("master"); // issuer tokenBuilder.Write(1L); // token id tokenBuilder.Write(1L); // key id tokenBuilder.Write(0L); // expiry tokenBuilder.Write((byte)24); // TreeMap type tokenBuilder.Write(1); // num entries tokenBuilder.Write("account_id"); // entry key tokenBuilder.Write((byte)3); // int type tokenBuilder.Write(id); // account_id tokenBuilder.Write((byte)0); // authenticator loopbackWorldResponse.idToken = tokenBuilder.GetBytes(); } else { log.Warn("account element missing multiverse_id attribute"); } break; case "update_url": if (child.Attributes["href"] != null) { update_url = child.Attributes["href"].Value; } else { log.Warn("update_url element missing href attribute"); } break; case "patcher_url": if (child.Attributes["href"] != null) { patcher_url = child.Attributes["href"].Value; } else { log.Warn("patcher_url element missing href attribute"); } break; case "server": if (child.Attributes["hostname"] != null) { hostname = child.Attributes["hostname"].Value; } else { log.Warn("server element missing hostname attribute"); } if (child.Attributes["port"] != null) { if (!int.TryParse(child.Attributes["port"].Value, out port)) { log.Warn("server element has invalid port attribute"); } } else { log.Warn("server element missing port attribute"); } break; case "world_repository": if (child.Attributes["world_id"] != null) { world_repositories.Add(Path.Combine(WorldServerEntry.WorldsFolder, child.Attributes["world_id"].Value)); } else if (child.Attributes["path"] != null) { world_repositories.Add(child.Attributes["path"].Value); } else { log.Warn("world_repository element missing world_id or path attribute"); } break; case "standalone": if (child.Attributes["script"] != null) { standalone = true; startup_script = child.Attributes["script"].Value; } else { log.Warn("standalone element missing script attribute"); } break; } } loopbackWorldResponse.worldServerEntry = new WorldServerEntry(world_id, hostname, port, patcher_url, update_url); loopbackWorldResponse.worldServerEntry.WorldRepositoryDirectories = world_repositories; loopbackWorldResponse.worldServerEntry.Standalone = standalone; loopbackWorldResponse.worldServerEntry.StartupScript = startup_script; worldServerEntries.Add(loopbackWorldResponse); }