-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPanelSetting.cs
More file actions
116 lines (100 loc) · 4.34 KB
/
PanelSetting.cs
File metadata and controls
116 lines (100 loc) · 4.34 KB
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
using System.Net.Sockets;
namespace M9Studio.ShadowTalk.Client
{
public partial class PanelSetting : UserControl
{
FormMain form;
public PanelSetting(FormMain form)
{
this.form = form;
InitializeComponent();
// Установим режим Details и скрытие заголовка
listView1.View = View.Details;
listView1.HeaderStyle = ColumnHeaderStyle.None;
// Очищаем старые колонки и создаём одну новую на всю ширину
listView1.Columns.Clear();
listView1.Columns.Add("", listView1.ClientSize.Width - 4); // -4 для скролла
// Обновляем ширину при изменении размера окна
listView1.Resize += (s, e) =>
{
if (listView1.Columns.Count > 0)
listView1.Columns[0].Width = listView1.ClientSize.Width - 4;
};
// Добавляем элементы
listView1.Items.Clear();
foreach (var item in form.core.Servers)
{
int id = item.Key;
ServerInfo server = item.Value;
string text = $"{id}) {server.Name} [{server.ServerName} {server.IP}:{server.Port}]";
ListViewItem lvi = new ListViewItem(text);
lvi.Tag = server;
lvi.ForeColor = item.Value.Session != null ? Color.Green : Color.Red;
listView1.Items.Add(lvi);
}
}
private void button1_Click(object sender, EventArgs e)
{
Visible = false;
var panel = new PanelLogin(textBoxName.Text, textBoxIP.Text, Convert.ToInt32(textBoxPort.Text), form, this);
form.panelAir.Controls.Add(panel);
// Центрируем элемент
panel.Anchor = AnchorStyles.None;
panel.Location = new Point(
(form.panelAir.Width - panel.Width) / 2,
(form.panelAir.Height - panel.Height) / 2
);
form.Text = "ShadowTalk Login";
}
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete && listView1.SelectedItems.Count > 0)
{
ListViewItem selectedItem = listView1.SelectedItems[0];
if (selectedItem.Tag is ServerInfo server)
{
// Вызов функции удаления
DeleteServer(server);
// Удаляем из ListView
listView1.Items.Remove(selectedItem);
}
}
}
private void DeleteServer(ServerInfo server)
{
if (form.core.Servers.ContainsKey(server.Id))
{
form.core.Servers.Remove(server.Id);
}
if (server.ChannelManager != null)
{
Socket socket = server.Socket;
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both); // отключение приёма и передачи
socket.Close(); // освобождение ресурсов
}
server.Socket = null;
server.ChannelManager = null;
server.Session = null;
//todo отключить все UDP сессии
foreach (var item in server.Users)
{
form.core.Users.Remove(item.Value);
form.panelUsers.Controls.Remove(item.Value.Panel);
}
form.core.DataBase.Send("DELETE FROM servers WHERE serverid = ?", server.ServerId);
form.core.DataBase.Send("DELETE FROM users WHERE serverid = ?", server.ServerId);
form.core.DataBase.Send("DELETE FROM messages WHERE serverid = ?", server.ServerId);
if (form.userNow != null && form.userNow.ServerId == server.ServerId)
{
form.ClearChat();
}
}
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show($"Порт: {form.core.Port}", "UDP Порт");
}
}
}