public void MessageChat(DataCover128kb data) { MessageChat mc = Protocol.BufferToObject <MessageChat>(data.Data); string mess; if (mc.TypeSender == SendrType.server) { mess = "SERVER\n"; } else { string name = "unknown"; if (mc.TypeSender == SendrType.terminal) { _TerminalModel.DispatcherInvokeModel((x) => name = x.ConnectedTermenals.FirstOrDefault(xx => xx.Id == mc.Id)?.Name); } else if (mc.TypeSender == SendrType.remote_device) { _TerminalModel.DispatcherInvokeModel((x) => name = x.ConnectedDevices.FirstOrDefault(xx => xx.Id == mc.Id)?.Name); } mess = $"id{Id.Value}:{name}:{mc.TypeSender}\n"; } mess += mc.Text; LogWriter.SendLog(mess); _TerminalModel.AddChatMessage(mess); }
private void SessionInf(DataCover128kb data) { TerminalConnectData tcd = Protocol.BufferToObject <TerminalConnectData>(data.Data); SessionData sd = ClientsControl.GetSessions().FirstOrDefault(x => x.RemDevGuid.SequenceEqual(tcd.RemDevGuid) && x.TerminalGuid.SequenceEqual(tcd.TerminalGuid)); if (tcd.IsEnabled) { if (sd != null) { sd.UpdateInfoToClients(); } else { ClientsControl.AddSession(new SessionData(tcd.TerminalGuid, tcd.RemDevGuid)); } } else { if (sd != null) { ClientsControl.RemoveSession(sd); } } }
public void SessionInf(DataCover128kb data) { SessionInfo si = Protocol.BufferToObject <SessionInfo>(data.Data); string mess = string.Empty; _TerminalModel.DispatcherInvokeModel(x => { if (si.Infotype == SessionMessageType.SesInformation || si.Infotype == SessionMessageType.SesCreateNow) { SessionView sv = x.ConnectedSessions.FirstOrDefault(xx => xx.Id == si.SessionId); if (sv == null) { x.ConnectedSessions.Add(new SessionView(si.SessionId, si.TerminalId, si.RemDevId, this, _TerminalModel)); } else { sv.UpdateIds(si.TerminalId, si.RemDevId); } mess = $"Сессия id{si.SessionId} создана, terminal:id{si.TerminalId}, remote_device:id{si.RemDevId}"; } else if (si.Infotype == SessionMessageType.SesShutdownNow || si.Infotype == SessionMessageType.SesLost) { x.ConnectedSessions.Remove(x.ConnectedSessions.FirstOrDefault(xx => xx.Id == si.SessionId)); mess = $"Сессия id{si.SessionId} прервана, terminal:id{si.TerminalId}, remote_device:id{si.RemDevId}"; } }); if (si.Infotype == SessionMessageType.SesCreateNow || si.Infotype == SessionMessageType.SesShutdownNow) { LogWriter.SendLog(mess); _TerminalModel.AddChatMessage(mess); } }
private static void addTerminal(Terminal t) { if (t.IsConnect) { byte[] bufer = new DataCover128kb(new ConnectedClientsInfo(t.Name, t.Id.Value, ClientInfoConnect.ConnectNow, ClientType.terminal).Pack(), DataType.connectedClientsInfo).Pack(); Terminals.Add(t); foreach (Terminal term in Terminals) { term.Write(bufer); byte[] buf = new DataCover128kb(new ConnectedClientsInfo(term.Name, term.Id.Value, ClientInfoConnect.ClientInf, ClientType.terminal).Pack(), DataType.connectedClientsInfo).Pack(); if (term.Id.Value != t.Id.Value) { t.Write(buf); } } foreach (RemoteDevice rd in Devices) { byte[] buf = new DataCover128kb(new ConnectedClientsInfo(rd.Name, rd.Id.Value, ClientInfoConnect.ClientInf, ClientType.remote_device).Pack(), DataType.connectedClientsInfo).Pack(); t.Write(buf); } foreach (SessionData sd in Sessions) { byte[] buf = new DataCover128kb(new SessionInfo(sd.Id, sd.GetTerminalId(Terminals), sd.GetRemoteDevId(Devices), SessionMessageType.SesInformation).Pack(), DataType.sessionInfo).Pack(); t.Write(buf); } LogWriter.SendLog($"Подключен терминал {t.Name}, присвоен id {t.Id.Value}"); } }
public void AssignedID(DataCover128kb data) { int id = Protocol.BufferToObject <ValInt32>(data.Data).Value; Id.Value = id; LogWriter.SendLog("Присвоен id " + Id.ToString()); _TerminalModel.OnPropertyChanged("Title"); }
public static void SendGlobalChat(string mess) { byte[] buf = new DataCover128kb(new MessageChat(-1, SendrType.server, mess).Pack(), DataType.messageChat).Pack(); foreach (Terminal t in GetTerminals()) { t.Write(buf); } }
public override void AceptMessage(DataCover128kb data) { base.AceptMessage(data); switch (data.BufferType) { case DataType.requistCreateSession: Session(data); break; } }
public override void AceptMessage(DataCover128kb data) { base.AceptMessage(data); switch (data.BufferType) { case DataType.ping: PingInfo(); break; } }
public override void AceptMessage(DataCover128kb data) { switch (data.BufferType) { case DataType.messageChat: MessageChat(data); break; case DataType.sessionInfo: SessionInf(data); break; } }
public void TryConnectToRemDev(DataCover128kb data) { ConnectedInfo ci = Protocol.BufferToObject <ConnectedInfo>(data.Data); _TerminalModel.TWMV.Dispatcher.Invoke(() => { SessionStarter st = new SessionStarter((IPEndPoint)Client.LocalEndPoint, new IPEndPoint(new IPAddress(ci.Ip), ci.Port), ci.Pass, _TerminalModel); st.Show(); }); }
public void PingInfo() { long ping = Ping; byte[] data = new DataCover128kb(new СonnectionQuality(Id.Value, ping, ClientType.remote_device).Pack(), DataType.connectionQuality).Pack(); foreach (Terminal t in ClientsControl.GetTerminals()) { t.Write(data); } }
public void UpdateInfoToClients() { int idt = GetTerminalId(ClientsControl.GetTerminals()); int idr = GetRemoteDevId(ClientsControl.GetDevices()); byte[] data = new DataCover128kb(new SessionInfo(Id, idt, idr, SessionMessageType.SesInformation).Pack(), DataType.sessionInfo).Pack(); foreach (Terminal term in ClientsControl.GetTerminals()) { term.Write(data); } }
public override void AceptMessage(DataCover128kb data) { switch (data.BufferType) { case DataType.ping: UpdateServerPing(); break; case DataType.assignedID: aceptRemdevId(data); break; default: break; } }
private void ClosingClient() { SessionModel.RemoveSessions(_SessionModel); if (_SessionModel._SessionW._TerminalModel.TerminalClie__t != null && _SessionModel._SessionW._TerminalModel.TerminalClie__t.IsConnect) { byte[] data = new DataCover128kb(new TerminalConnectData(MainWindow.TerminalGuid, RemotelGuid, false).Pack(), DataType.sessionInfo).Pack(); _SessionModel._SessionW._TerminalModel.TerminalClie__t.Write(data); } LogWriter.SendLog($"Соединение с удаленным устройством {_SessionModel.Title} прервано.", ConsoleColor.Red, true); _SessionModel.DispatcherInvokeSessionW((x) => x.Close()); }
protected void MessageChat(DataCover128kb data) { MessageChat mc = Protocol.BufferToObject <MessageChat>(data.Data); string mess = $"[{DateTime.Now}]:id{Id.Value}:{Name}:{mc.TypeSender}\n{mc.Text}"; LogWriter.SendLog(mess); byte[] buf = data.Pack(); foreach (Terminal t in ClientsControl.GetTerminals()) { t.Write(buf); } }
public ClientObj(Socket c, string name, byte[] clientGuid) : base(c) { ClientGuid = clientGuid; Name = name; Id.Value = nextId; nextId += 1; ValInt32 vi32 = new ValInt32(Id.Value); DataCover128kb dc128 = new DataCover128kb(vi32.Pack(), DataType.assignedID); Write(dc128); }
public TerminalClient(Socket c, TerminalModel tm) : base(c) { _TerminalModel = tm; EventAfterCloseClient += ClosingClient; foreach (SessionModel sc in SessionModel.GetSessions()) { if (sc._SessionClient.IsConnect) { byte[] data = new DataCover128kb(new TerminalConnectData(MainWindow.TerminalGuid, sc._SessionClient.RemotelGuid, true).Pack(), DataType.sessionInfo).Pack(); Write(data); } } }
private static void addDevice(RemoteDevice t) { if (t.IsConnect) { Devices.Add(t); byte[] bufer = new DataCover128kb(new ConnectedClientsInfo(t.Name, t.Id.Value, ClientInfoConnect.ConnectNow, ClientType.remote_device).Pack(), DataType.connectedClientsInfo).Pack(); foreach (Terminal term in Terminals) { term.Write(bufer); } LogWriter.SendLog($"Подключено удаленное устройство {t.Name}, присвоен id {t.Id.Value}"); } }
public SessionClient(Socket c, SessionModel sm, byte[] remotelGuid) : base(c) { RemotelGuid = remotelGuid; _SessionModel = sm; if (_SessionModel._SessionW._TerminalModel.TerminalClie__t != null && _SessionModel._SessionW._TerminalModel.TerminalClie__t.IsConnect) { byte[] data = new DataCover128kb(new TerminalConnectData(MainWindow.TerminalGuid, RemotelGuid, true).Pack(), DataType.sessionInfo).Pack(); _SessionModel._SessionW._TerminalModel.TerminalClie__t.Write(data); } EventAfterCloseClient += ClosingClient; }
private static void removeSession(SessionData t) { if (Sessions.Remove(t)) { int idt = t.GetTerminalId(Terminals); int idr = t.GetRemoteDevId(Devices); byte[] dc128 = new DataCover128kb(new SessionInfo(t.Id, idt, idr, SessionMessageType.SesShutdownNow).Pack(), DataType.sessionInfo).Pack(); foreach (Terminal te in Terminals) { te.Write(dc128); } LogWriter.SendLog($"Cессия более не зарегестрирована {t.Id}:{idt}:{idr}"); } }
private static void addSession(SessionData t) { Sessions.Add(t); int idt = t.GetTerminalId(Terminals); int idr = t.GetRemoteDevId(Devices); byte[] dc128 = new DataCover128kb(new SessionInfo(t.Id, idt, idr, SessionMessageType.SesCreateNow).Pack(), DataType.sessionInfo).Pack(); foreach (Terminal te in Terminals) { te.Write(dc128); } LogWriter.SendLog($"Создана новая сессия {t.Id}:{idt}:{idr}"); }
private bool registrationProcess(Socket client, ConfigView conf) { client.ReceiveTimeout = 1000; RegistrationData rd = new RegistrationData(conf.Name, conf.Login, conf.Pass, TerminalGuid, ClientType.terminal); DataCover128kb dc = new DataCover128kb(rd.Pack(), DataType.registrationRequist); byte[] rdbytes = dc.Pack(); client.Send(rdbytes, 0, rdbytes.Length, SocketFlags.None); byte[] bufer = new byte[Protocol.CoverSize]; Protocol.ReadStream(client, bufer, 0, bufer.Length); Cover report = Protocol.BufferToObject <Cover>(bufer); return(report.BufferType == DataType.registrationComlited); }
private static void tryLostSession(SessionData t) { int idt = t.GetTerminalId(Terminals); int idr = t.GetRemoteDevId(Devices); if (idt == -1 && idr == -1 && Sessions.Remove(t)) { byte[] dc128 = new DataCover128kb(new SessionInfo(t.Id, idt, idr, SessionMessageType.SesLost).Pack(), DataType.sessionInfo).Pack(); foreach (Terminal te in Terminals) { te.Write(dc128); } LogWriter.SendLog($"Cессия вышла из зоны видимости {t.Id}:{idt}:{idr}"); } }
private bool registration(Socket s) { try { SendStatus($"Процесс авторизации"); s.ReceiveTimeout = 3000; byte[] regData = new DataCover128kb(new TerminalRegRemDev(MainWindow.TerminalGuid, Pass, MainWindow.CW.Name).Pack(), DataType.registrationRequist).Pack(); s.Send(regData, 0, regData.Length, SocketFlags.None); byte[] coverBuf = new byte[Protocol.CoverSize]; Protocol.ReadStream(s, coverBuf, 0, coverBuf.Length); Cover cov = Protocol.BufferToObject <Cover>(coverBuf); if (cov.BufferType == DataType.registrationComlited) { byte[] dataCovBuf = new byte[cov.DataSize]; //Array.Copy(coverBuf, dataCovBuf, Protocol.CoverSize); Protocol.ReadStream(s, dataCovBuf, 0, cov.DataSize); TerminalRegRemDev result = Protocol.BufferToObject <TerminalRegRemDev>(dataCovBuf); if (result.Pass.SequenceEqual(Pass)) { remdevName = result.SenderName; remdevGuid = result.SenderGuid; SendStatus($"Авторизация произведена"); SendStatus($"Соединение с {remdevName} успешно установлено"); return(true); } else { throw new Exception("Регистрационные данные не верны"); } } else { throw new Exception("Принят не верный ответ от удаленного устройства"); } } catch (Exception e) { SendStatus(e.Message, ConsoleColor.Red); return(false); } }
public void ConnectedClientInfo(DataCover128kb data) { ConnectedClientsInfo cci = Protocol.BufferToObject <ConnectedClientsInfo>(data.Data); string mess = string.Empty; _TerminalModel.DispatcherInvokeModel((x) => { if (cci.TypeClient == ClientType.terminal) { if (cci.Connect == ClientInfoConnect.ConnectNow || cci.Connect == ClientInfoConnect.ClientInf) { _TerminalModel.ConnectedTermenals.Add(new TerminalClientView(cci.Id, cci.Name, this, _TerminalModel)); mess = $"Подключен терминал {cci.Name}, присвоен id {cci.Id}"; } else { foreach (TerminalClientView c in new List <TerminalClientView>(_TerminalModel.ConnectedTermenals.Where(xx => xx.Id == cci.Id))) { _TerminalModel.ConnectedTermenals.Remove(c); } mess = $"Терминал {cci.Name} отключен, id {cci.Id}"; } } else if (cci.TypeClient == ClientType.remote_device) { if (cci.Connect == ClientInfoConnect.ConnectNow || cci.Connect == ClientInfoConnect.ClientInf) { _TerminalModel.ConnectedDevices.Add(new RemoteDevClientView(cci.Id, cci.Name, this, _TerminalModel)); mess = $"Подключено удаленное устройство {cci.Name}, присвоен id {cci.Id}"; } else { foreach (RemoteDevClientView c in new List <RemoteDevClientView>(_TerminalModel.ConnectedDevices.Where(xx => xx.Id == cci.Id))) { _TerminalModel.ConnectedDevices.Remove(c); } mess = $"Удаленное устройство {cci.Name} отключено, id {cci.Id}"; } } }); if (cci.Connect != ClientInfoConnect.ClientInf) { LogWriter.SendLog(mess); _TerminalModel.AddChatMessage(mess); } }
public void ConnectQuality(DataCover128kb data) { СonnectionQuality cq = Protocol.BufferToObject <СonnectionQuality>(data.Data); if (cq.Cli_ntType == ClientType.remote_device) { _TerminalModel.DispatcherInvokeModel(x => { RemoteDevClientView rd = null; rd = x.ConnectedDevices.FirstOrDefault(xx => xx.Id == cq.ClientId); if (rd != null) { rd.Ping = cq.Ping; } }); } }
public override void AceptMessage(DataCover128kb data) { switch (data.BufferType) { case DataType.ping: UpdateServerPing(); break; case DataType.connectionQuality: ConnectQuality(data); break; case DataType.assignedID: AssignedID(data); break; case DataType.connectedClientsInfo: ConnectedClientInfo(data); break; case DataType.messageChat: MessageChat(data); break; case DataType.sessionInfo: SessionInf(data); break; case DataType.createSessionIpPort: TryConnectToRemDev(data); break; } }
private static void removeDevice(RemoteDevice t) { t.CloseClient(); if (Devices.Remove(t)) { byte[] bufer = new DataCover128kb(new ConnectedClientsInfo(t.Name, t.Id.Value, ClientInfoConnect.DisconectNow, ClientType.remote_device).Pack(), DataType.connectedClientsInfo).Pack(); foreach (Terminal term in Terminals) { term.Write(bufer); } LogWriter.SendLog($"Удаленное устройство {t.Name} отключено, id {t.Id.Value}"); SessionData sd = Sessions.FirstOrDefault(x => x.RemDevGuid.SequenceEqual(t.ClientGuid)); if (sd != null) { tryLostSession(sd); } } }
public static void removeTerminal(Terminal t) { t.CloseClient(); if (Terminals.Remove(t)) { byte[] bufer = new DataCover128kb(new ConnectedClientsInfo(t.Name, t.Id.Value, ClientInfoConnect.DisconectNow, ClientType.terminal).Pack(), DataType.connectedClientsInfo).Pack(); foreach (Terminal term in Terminals) { term.Write(bufer); } LogWriter.SendLog($"Терминал {t.Name} отключен, id { t.Id.Value}"); SessionData sd = Sessions.FirstOrDefault(x => x.TerminalGuid.SequenceEqual(t.ClientGuid)); if (sd != null) { tryLostSession(sd); } } }
public void Session(DataCover128kb data) { CreateSession si = Protocol.BufferToObject <CreateSession>(data.Data); RemoteDevice rd = ClientsControl.GetDevices().FirstOrDefault(x => x.Id.Value == si.RemDevId); if (rd != null) { string text = $"Запрос создания сессии id{Id.Value}:{Name} id{rd.Id.Value}:{rd.Name}"; LogWriter.SendLog(text); ClientsControl.SendGlobalChat(text); byte[] ip = new byte[4]; int port = si.CustomPort; string[] ipstrar = null; if (port > -1) { ipstrar = Program.GLOBALIP.Split('.'); } else { IPEndPoint ipep = (IPEndPoint)Client.RemoteEndPoint; ipstrar = ipep.Address.ToString().Split('.'); port = ipep.Port; } for (int i = 0; i < ip.Length; i += 1) { ip[i] = byte.Parse(ipstrar[i]); } byte[] pass = Guid.NewGuid().ToByteArray(); rd.Write(new DataCover128kb(new ConnectedInfo(ip, port, pass).Pack(), DataType.createSessionIpPort).Pack()); Write(new DataCover128kb(new ConnectedInfo(((IPEndPoint)rd.Client.RemoteEndPoint).Address.GetAddressBytes(), ((IPEndPoint)rd.Client.RemoteEndPoint).Port, pass).Pack(), DataType.createSessionIpPort).Pack()); } else { string text = $"В запросе создания сессии для {Id.Value}:{Name} отказано, удаленное устройство id:{si.RemDevId} не подключено"; LogWriter.SendLog(text); ClientsControl.SendGlobalChat(text); } }