4-Opisanie_Programmy_final (Готовый курсовой проект 10), страница 2
Описание файла
Файл "4-Opisanie_Programmy_final" внутри архива находится в следующих папках: Готовый курсовой проект 10, kursa4-seti. Документ из архива "Готовый курсовой проект 10", который расположен в категории "". Всё это находится в предмете "сетевые технологии" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "сетевые технологии" в общих файлах.
Онлайн просмотр документа "4-Opisanie_Programmy_final"
Текст 2 страницы из документа "4-Opisanie_Programmy_final"
{
var stack = new Stack<int>();
var charBuf = oneChar;
while (charBuf > 0)
{
stack.Push(charBuf%2);
charBuf /= 2;
}
if (stack.Count != 11)
for (var i = 11 - stack.Count; i > 0; i--)
stack.Push(0);
var buf = stack.ToArray<int>();
stack.Clear();
var heming = new byte[16];
heming[0] = 0;
heming[1] = (byte) buf[0];
heming[2] = (byte) buf[1];
heming[3] = (byte) buf[2];
heming[4] = (byte) buf[3];
heming[5] = (byte) buf[4];
heming[6] = (byte) buf[5];
heming[7] = (byte) buf[6];
heming[8] = (byte) (heming[1] ^ heming[2] ^ heming[3] ^ heming[4] ^ heming[5] ^ heming[6] ^ heming[7]);
heming[9] = (byte) buf[7];
heming[10] = (byte) buf[8];
heming[11] = (byte) buf[9];
heming[12] =
(byte) (heming[1] ^ heming[2] ^ heming[3] ^ heming[4] ^ heming[9] ^ heming[10] ^ heming[11]);
heming[13] = (byte) buf[10];
heming[14] =
(byte) (heming[1] ^ heming[2] ^ heming[5] ^ heming[6] ^ heming[9] ^ heming[10] ^ heming[13]);
heming[15] =
(byte) (heming[1] ^ heming[3] ^ heming[5] ^ heming[7] ^ heming[9] ^ heming[11] ^ heming[13]);
var bytesToSend = new[] {0, 0};
for (var a = 0; a < 16; a++)
if (heming[a] == 1)
bytesToSend[a/8] += (int) Math.Pow(2, 7 - (a%8));
returnMsg.Add(Convert.ToByte(bytesToSend[0]));
returnMsg.Add(Convert.ToByte(bytesToSend[1]));
}
return returnMsg.ToArray<byte>();
}
public string DeCodeString(byte[] msg)
{
var arrCol = (msg.Length/2) + 1;
var doubleArr = new byte[arrCol, 2];
var currentStroka = -1;
string newMessage = null;
for (var l = 0; l < msg.Length; l++)
{
if (l%2 == 0)
currentStroka++;
doubleArr[currentStroka, l%2] = msg[l];
}
for (var l = 0; l < arrCol; l++)
{
var intPtr = new List<int>();
var buf1 = Convert.ToInt32(doubleArr[l, 0]);
var buf2 = Convert.ToInt32(doubleArr[l, 1]);
var stack1 = new Stack<int>();
var stack2 = new Stack<int>();
while (buf1 > 0)
{
stack1.Push(buf1%2);
buf1 /= 2;
}
while (buf2 > 0)
{
stack2.Push(buf2%2);
buf2 /= 2;
}
if (stack1.Count != 8)
for (var i = 8 - stack1.Count; i > 0; i--)
stack1.Push(0);
if (stack2.Count != 8)
for (var i = 8 - stack2.Count; i > 0; i--)
stack2.Push(0);
intPtr.AddRange(stack1.ToArray<int>());
intPtr.AddRange(stack2.ToArray<int>());
var buf = new int[4];
buf[0] = intPtr[1] ^ intPtr[2] ^ intPtr[3] ^
intPtr[4] ^ intPtr[5] ^ intPtr[6] ^
intPtr[7] ^ intPtr[8];
buf[1] = intPtr[1] ^ intPtr[2] ^ intPtr[3] ^
intPtr[4] ^ intPtr[9] ^ intPtr[10] ^
intPtr[11] ^ intPtr[12];
buf[2] = intPtr[1] ^ intPtr[2] ^ intPtr[5] ^
intPtr[6] ^ intPtr[9] ^ intPtr[10] ^
intPtr[13] ^ intPtr[14];
buf[3] = intPtr[1] ^ intPtr[3] ^ intPtr[5] ^
intPtr[7] ^ intPtr[9] ^ intPtr[11] ^
intPtr[13] ^ intPtr[15];
var isNull = true;
for (var i = 0; i < 4; i++)
{
if (buf[i] == 0) continue;
isNull = false;
break;
}
if (!isNull)
return string.Empty;
var newPtr = new int[11];
newPtr[0] = intPtr[1];
newPtr[1] = intPtr[2];
newPtr[2] = intPtr[3];
newPtr[3] = intPtr[4];
newPtr[4] = intPtr[5];
newPtr[5] = intPtr[6];
newPtr[6] = intPtr[7];
newPtr[7] = intPtr[9];
newPtr[8] = intPtr[10];
newPtr[9] = intPtr[11];
newPtr[10] = intPtr[13];
var onlychar = 0;
for (var i = 0; i < 11; i++)
if (newPtr[i] == 1)
onlychar += (int) Math.Pow(2, 10 - i);
newMessage += Convert.ToChar(onlychar);
}
return newMessage;
}
}
}
UserForm.cs (Работа формы выбора пользователя)
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace ST_Kurs_Chat
{
public partial class UserForm : Form
{
public string CurrentUser;
public UserForm()
{
InitializeComponent();
}
private void UserNameOKButton_Click(object sender, EventArgs e)
{
var allUsers = new List<string> {"Сергей", "Валерия", "Надежда"};
if (!allUsers.Contains(UserField.Text))
ErrorLabel.Visible = true;
else
{
CurrentUser = UserField.Text;
if (ActiveForm != null) ActiveForm.Close();
}
}
}
}
SettingsForm.cs (Работа формы настроек)
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Windows.Forms;
namespace ST_Kurs_Chat
{
public partial class SettingsForm : Form
{
private readonly Settings _settings = new Settings();
public string currentUser;
public bool portIsFree;
public Dictionary<string, SerialPort> userPorts = new Dictionary<string, SerialPort>();
public SettingsForm()
{
InitializeComponent();
}
private void SettingsForm_Load(object sender, EventArgs e)
{
LoadValues();
SetDefaults();
}
private void LoadValues()
{
_settings.SetParityToComboBox(SettingsParity);
_settings.SetStopBitsToComboBox(SettingsStop);
}
private void SetDefaults()
{
SettingsSpeed.SelectedText = "9600";
SettingsParity.SelectedIndex = 0;
SettingsStop.SelectedIndex = 1;
SettingsData.SelectedIndex = 1;
}
private void SettingsOK_Click(object sender, EventArgs e)
{
_settings.Parity = SettingsParity.Text;
_settings.Stop = SettingsStop.Text;
_settings.Data = SettingsData.Text;
_settings.Speed = SettingsSpeed.Text;
portIsFree = _settings.OpenPort(currentUser);
userPorts = _settings.ports;
if (ActiveForm != null) ActiveForm.Close();
}
}
}
InfoForm.cs (Работа формы информации о программе)
using System;
using System.Windows.Forms;
namespace ST_Kurs_Chat
{
public partial class InfoForm : Form
{
public InfoForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (ActiveForm != null) ActiveForm.Close();
}
}
}
HistoryForm.cs (Работа формы истории)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ST_Kurs_Chat.Формы
{
public partial class HistoryForm : Form
{
public string Filepath;
public HistoryForm()
{
InitializeComponent();
}
private void HistoryForm_Load(object sender, EventArgs e)
{
var sr = new StreamReader(Filepath, Encoding.Default);
richTextBox1.Text = sr.ReadToEnd();
sr.Close();
}
}
}
Form1.cs (Работа главной формы)
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using ST_Kurs_Chat.Формы;
using Timer = System.Windows.Forms.Timer;
namespace ST_Kurs_Chat
{
public partial class Form1 : Form
{
private const byte START = 0xFF;
private int _countDownLinkTry;
private int _countTry;
private int _countTryActiveLink;
private List<SerialPort> _ports = new List<SerialPort>();
private Dictionary<string, SerialPort> _portsDict = new Dictionary<string, SerialPort>();
public string CurrentUser;
public readonly Timer _ackActivelinkTimer = new Timer();
public readonly Timer _ackDownlinkTimer = new Timer();
public readonly Timer _ackUplinkTimer = new Timer();
public readonly Timer _ackUplinkTimer1 = new Timer();
public readonly Timer _ackDownlinkTimer1 = new Timer();
private readonly List<string> _allUsers = new List<string>();
private readonly ConectionManager _manager = new ConectionManager();
private readonly SettingsForm _settingsForm = new SettingsForm();
private readonly UserForm _userForm = new UserForm();
public Form1()
{
InitializeComponent();
}
private void AckUplinkTimerTick(object sender, EventArgs e)
{
var comPort = _ports[0];
if (_countTry > 0)
{
bool isOpen;
_manager.linkActiveDictionary.TryGetValue(comPort.PortName, out isOpen);
if (isOpen)
{
_countTry = 3;
_ackUplinkTimer.Stop();
_manager.WriteData(null, ConectionManager.FrameType.UPLINK, false, _ports[1]);
_ackUplinkTimer1.Start();
}
else
{
_countTry--;
_manager.WriteData(null, ConectionManager.FrameType.UPLINK, false, comPort);
}
}
else
DisconnectionState();
}
private void AckDownlinkTimerTick(object sender, EventArgs e)
{
var comPort = _ports[0];
bool isOpen;
_manager.linkActiveDictionary.TryGetValue(comPort.PortName, out isOpen);
if (_countDownLinkTry > 0)
{
if (!isOpen)
{
_countDownLinkTry = 3;
_ackDownlinkTimer.Stop();
_manager.WriteData(textBox1.Text, ConectionManager.FrameType.DOWNLINK, false, _ports[1]);
_ackDownlinkTimer1.Start();
}
else
{
_countDownLinkTry--;
_manager.WriteData(textBox1.Text, ConectionManager.FrameType.DOWNLINK, false, comPort);
}
}
else
DisconnectionState();
}
private void AckUplinkTimerTick1(object sender, EventArgs e)
{
var comPort = _ports[1];
bool isOpen;
_manager.linkActiveDictionary.TryGetValue(comPort.PortName, out isOpen);
if (_countTry > 0)
{
if (isOpen && _manager.linkActiveDictionary.Count == 2)
{
DisconectionButton.Enabled = true;
ConnectionButton.Enabled = false;
SendTextButton.Enabled = true;
textBox1.Enabled = true;
WideSpreadCheckBox.Enabled = true;
UsersBox.Enabled = true;
_countTry = 3;
_ackUplinkTimer1.Stop();
_ackActivelinkTimer.Start();
}
else
{
_countTry--;
_manager.WriteData(null, ConectionManager.FrameType.UPLINK, false, comPort);
}
}
else
DisconnectionState();
}
private void AckDownlinkTimerTick1(object sender, EventArgs e)
{
var comPort = _ports[1];
bool isOpen;
_manager.linkActiveDictionary.TryGetValue(comPort.PortName, out isOpen);
if (_countDownLinkTry > 0)
{
if (!isOpen)
{
DisconectionButton.Enabled = false;
ConnectionButton.Enabled = true;
SendTextButton.Enabled = false;
textBox1.Enabled = false;
WideSpreadCheckBox.Enabled = false;
UsersBox.Enabled = false;
_countDownLinkTry = 3;
_ackDownlinkTimer1.Stop();
}
else
{
_countDownLinkTry--;
_manager.WriteData(textBox1.Text, ConectionManager.FrameType.DOWNLINK, false, comPort);
}
}
else
DisconnectionState();
}
private void AckActivelinkTimerTick(object sender, EventArgs e)
{
foreach (var comPort in _ports)
{
if (_countTryActiveLink > 0)
{
if (!_manager.linkActiveDictionary.ContainsValue(false))
{
_manager.WriteData(null, ConectionManager.FrameType.LINKACTIVE, true, comPort);
_countTryActiveLink = 3*_ports.Count;
}
else
{
_countTryActiveLink--;
_manager.WriteData(null, ConectionManager.FrameType.LINKACTIVE, false, comPort);
}
}
else
{
DisconnectionState();
textBox1.Clear();
}