public override string ToString() { var options = new MstProperties(); options.Add("MachineIp", MachineIp); options.Add("MaxProcesses", MaxProcesses); options.Add("Region", string.IsNullOrEmpty(Region) ? "International" : Region); options.Append(CustomOptions); return(options.ToReadableString()); }
public override string ToString() { var options = new MstProperties(); options.Add("RoomIp", RoomIp); options.Add("RoomPort", RoomPort); options.Add("RoomId", RoomId); options.Add("Token", Token); options.Add("SceneName", SceneName); options.Append(CustomOptions); return($"[Room Access Info: {options.ToReadableString()}]"); }
public override string ToString() { var options = new MstProperties(); options.Add("Username", Username); options.Add("Email", Email); options.Add("Token", Token); options.Add("IsAdmin", IsAdmin); options.Add("IsGuest", IsGuest); options.Add("IsEmailConfirmed", IsEmailConfirmed); options.Append(Properties); return(options.ToReadableString()); }
public override string ToString() { var options = new MstProperties(); options.Add("Id", Id); options.Add("Username", Username); options.Add("Password", "**********"); options.Add("Email", Email); options.Add("PhoneNumber", PhoneNumber); options.Add("Facebook", Facebook); options.Append(Properties); return(options.ToReadableString(";\n")); }
public override string ToString() { var options = new MstProperties(); options.Add("RoomName", Name); options.Add("RoomIp", RoomIp); options.Add("RoomPort", RoomPort); options.Add("MaxConnections", MaxConnections <= 0 ? "Unlimited" : MaxConnections.ToString()); options.Add("Use Password", !string.IsNullOrEmpty(Password)); options.Add("AccessTimeoutPeriod", $"{AccessTimeoutPeriod} sec."); options.Add("AllowUsersRequestAccess", AllowUsersRequestAccess); options.Add("Region", string.IsNullOrEmpty(Region) ? "International" : Region); options.Append(CustomOptions); return(options.ToReadableString()); }
public override string ToString() { var options = new MstProperties(); options.Add("Id", Id); options.Add("Username", Username); options.Add("Email", Email); options.Add("PhoneNumber", PhoneNumber); options.Add("Facebook", Facebook); options.Add("Token", Token); options.Add("IsAdmin", IsAdmin); options.Add("IsGuest", IsGuest); options.Add("IsEmailConfirmed", IsEmailConfirmed); options.Append(Properties); return(options.ToReadableString(";\n")); }
public override string ToString() { string maxPleyers = MaxPlayers <= 0 ? "Unlimited" : MaxPlayers.ToString(); var options = new MstProperties(); options.Add("Id", Id); options.Add("Address", Address); options.Add("Type", Type.ToString()); options.Add("Name", Name); options.Add("Region", string.IsNullOrEmpty(Region) ? "International" : Region); options.Add("IsPasswordProtected", IsPasswordProtected); options.Add("MaxPlayers", maxPleyers); options.Add("OnlinePlayers", $"{OnlinePlayers}/{maxPleyers}"); options.Append(Properties); return($"[GameInfo: {options.ToReadableString()}]"); }
/// <summary> /// Set a lobby player property /// </summary> /// <param name="properties"></param> public void SetLobbyProperties(Dictionary <string, string> properties) { propertiesList.Append(properties); }
/// <summary> /// Default spawn spawned process request handler that will be used by controller if <see cref="spawnRequestHandler"/> is not overriden /// </summary> /// <param name="data"></param> /// <param name="message"></param> public virtual void SpawnRequestHandler(SpawnRequestPacket data, IIncomingMessage message) { Logger.Debug($"Default spawn handler started handling a request to spawn process for spawn controller [{SpawnerId}]"); /************************************************************************/ // Create process args string var processArguments = new MstProperties(); /************************************************************************/ // Check if we're overriding an IP to master server var masterIpArgument = string.IsNullOrEmpty(SpawnSettings.MasterIp) ? Connection.ConnectionIp : SpawnSettings.MasterIp; // Create master IP arg processArguments.Set(Mst.Args.Names.MasterIp, masterIpArgument); /************************************************************************/ /// Check if we're overriding a port to master server var masterPortArgument = SpawnSettings.MasterPort < 0 ? Connection.ConnectionPort : SpawnSettings.MasterPort; // Create master port arg processArguments.Set(Mst.Args.Names.MasterPort, masterPortArgument); /************************************************************************/ // Machine Ip processArguments.Set(Mst.Args.Names.RoomIp, SpawnSettings.MachineIp); /************************************************************************/ // Create port for room arg int machinePortArgument = Mst.Server.Spawners.GetAvailablePort(); processArguments.Set(Mst.Args.Names.RoomPort, machinePortArgument); /************************************************************************/ // Room Name //processArguments.Set(Mst.Args.Names.RoomName, $"\"{data.Options.AsString(MstDictKeys.roomName, "Room_" + Mst.Helper.CreateRandomString(6))}\""); /************************************************************************/ // Room Region //processArguments.Set(Mst.Args.Names.RoomRegion, $"\"{SpawnSettings.Region}\""); /************************************************************************/ // Room Max Connections //if (data.Options.Has(MstDictKeys.maxPlayers)) //{ // processArguments.Set(Mst.Args.Names.RoomMaxConnections, data.Options.AsString(MstDictKeys.maxPlayers)); //} /************************************************************************/ // Get the scene name //if (data.Options.Has(MstDictKeys.sceneName)) //{ // processArguments.Set(Mst.Args.Names.LoadScene, data.Options.AsString(MstDictKeys.sceneName)); //} /************************************************************************/ // Create use websockets arg //if (SpawnSettings.UseWebSockets) //{ // processArguments.Set(Mst.Args.Names.UseWebSockets, string.Empty); //} /************************************************************************/ // Create spawn id arg processArguments.Set(Mst.Args.Names.SpawnTaskId, data.SpawnTaskId); /************************************************************************/ // Create spawn code arg processArguments.Set(Mst.Args.Names.SpawnTaskUniqueCode, data.SpawnTaskUniqueCode); /************************************************************************/ // Create custom args processArguments.Append(data.CustomOptions); /************************************************************************/ // Path to executable var executablePath = SpawnSettings.ExecutablePath; if (string.IsNullOrEmpty(executablePath)) { executablePath = File.Exists(Environment.GetCommandLineArgs()[0]) ? Environment.GetCommandLineArgs()[0] : Process.GetCurrentProcess().MainModule.FileName; } // In case a path is provided with the request if (data.Options.Has(MstDictKeys.ROOM_EXE_PATH)) { executablePath = data.Options.AsString(MstDictKeys.ROOM_EXE_PATH); } if (!string.IsNullOrEmpty(data.OverrideExePath)) { executablePath = data.OverrideExePath; } /// Create info about starting process var startProcessInfo = new ProcessStartInfo(executablePath) { CreateNoWindow = false, UseShellExecute = true, Arguments = processArguments.ToReadableString(" ", " ") }; Logger.Debug("Starting process with args: " + startProcessInfo.Arguments); var processStarted = false; try { new Thread(() => { try { using (var process = Process.Start(startProcessInfo)) { Logger.Debug("Process started. Spawn Id: " + data.SpawnTaskId + ", pid: " + process.Id); processStarted = true; lock (processLock) { // Save the process processes[data.SpawnTaskId] = process; } var processId = process.Id; // Notify server that we've successfully handled the request MstTimer.RunInMainThread(() => { message.Respond(ResponseStatus.Success); NotifyProcessStarted(data.SpawnTaskId, processId, startProcessInfo.Arguments); }); process.WaitForExit(); } } catch (Exception e) { if (!processStarted) { MstTimer.RunInMainThread(() => { message.Respond(ResponseStatus.Failed); }); } Logger.Error("An exception was thrown while starting a process. Make sure that you have set a correct build path. " + $"We've tried to start a process at [{executablePath}]. You can change it at 'SpawnerBehaviour' component"); Logger.Error(e); } finally { lock (processLock) { // Remove the process processes.Remove(data.SpawnTaskId); } MstTimer.RunInMainThread(() => { // Release the port number Mst.Server.Spawners.ReleasePort(machinePortArgument); Logger.Debug($"Notifying about killed process with spawn id [{data.SpawnTaskId}]"); NotifyProcessKilled(data.SpawnTaskId); }); } }).Start(); } catch (Exception e) { message.Respond(e.Message, ResponseStatus.Error); Logs.Error(e); } }