superstar_v2/Room.cs

130 lines
4.2 KiB
C#

using OverlayFormObj;
using DBObj;
using MySqlConnector;
using System.Data;
namespace DualScreenDemo
{
public class Room
{
public int branch_id = 0;
public string hostName;
private string State = "error";
private DateTime? startedAt;
private DateTime? endedAt;
public Room()
{
hostName = System.Net.Dns.GetHostName();
branch_id = getBranchId();
State = getDB();
Console.WriteLine($"hostname status: {hostName},{State},{startedAt},{endedAt}");
}
private int getBranchId()
{
using (var db = new MyDB())
{
string sql = "SELECT id FROM branches LIMIT 1";
if (db.open(sql, null) && db.found()) return db.Field<int>("id");
return 0;
}
}
private string getDB()
{
using (var db = new MyDB())
{
string query = @"SELECT * FROM rooms WHERE branch_id = @branch_id AND CONCAT(type, name) = @hostName";
MySqlParameter[] parameters = {
new MySqlParameter("@branch_id", branch_id),
new MySqlParameter("@hostName", hostName)
};
if (db.open(query, parameters) && db.found())
{
var Statedb = db.Field<string>("status");
startedAt = ParseTime(db.Field<string>("started_at"));
endedAt = ParseTime(db.Field<string>("ended_at"));
if (Statedb.Equals("maintain")) { Statedb = "active"; }
return Statedb;
}
}
return "error";
}
public TimeSpan getTimeSpan() => (endedAt != null && endedAt.HasValue) ? (TimeSpan)(endedAt.Value - DateTime.Now) : TimeSpan.Zero;
public void setDB(string value)
{
using (var db = new MyDB())
{
string query = @"UPDATE rooms SET status = @status WHERE branch_id = @branch_id AND CONCAT(type, name) = @hostName;";
MySqlParameter[] parameters = {
new MySqlParameter("@status", value),
new MySqlParameter("@branch_id", branch_id),
new MySqlParameter("@hostName", hostName)
};
db.ExecuteNonQuery(query, parameters);
}
}
public void set(string value)
{
string StateDB = getDB();
if (!StateDB.Equals(State))
State = StateDB;
else
return;
string marqueeMessage = "歡迎使用超級巨星歡唱,與你共度美好時光。";
Color c = Color.White;
if (State.Equals("fire"))
{
PrimaryForm.Instance.ShowSendOffScreen();
VideoPlayerForm.Instance.Pause();
marqueeMessage = "發生火災,請跟隨引導至逃生出口!!!";
c = Color.Red;
}
else if (State.Equals("active"))
{
DBObj.SongList.clearSong();
PrimaryForm.Instance.HotPlayButton_Click(null, EventArgs.Empty);
PrimaryForm.Instance.HideSendOffScreen();
}
else
{
DBObj.SongList.roomClose();
PrimaryForm.Instance.pictureBoxQRCode.Visible = false;
PrimaryForm.Instance.closeQRCodeButton.Visible = false;
PrimaryForm.Instance.ShowSendOffScreen();
OverlayForm.MainForm.topLeftLabel.Visible = false;
//VideoPlayerForm.Instance.PlayNextSong();
PrimaryForm.Instance.logout();
}
OverlayForm.MainForm.UpdateMarqueeText(marqueeMessage, OverlayForm.MarqueeStartPosition.Middle, c);
}
private DateTime? ParseTime(string value)
{
if (DateTime.TryParse(value, out var dt))
return dt;
return null;
}
public bool IsClose() => State.Equals("closed");
public bool IsOpen() => State.Equals("active");
public string Getstate()
{
return State;
}
}
}