public ControllerItem(string token, TcpClient client, ControllerPermissions permissions) { Token = token; Client = client; Permissions = permissions; CurrentCamera = null; }
private void SendAll(MessageType msgType, ControllerPermissions msgPerm, string srcToken, byte[] msgData) { if (msgType != MessageType.Unknown && msgData != null) { lock (m_controllerClientsLock) { using (var stream = new MemoryStream()) using (var bs = new BinaryWriter(stream)) { bs.Write((int)msgType); bs.Write(msgData); msgData = stream.GetBuffer(); var sb = BitConverter.GetBytes(msgData.Length); foreach (var controller in m_controllerClients) { if (controller.Value.Permissions.HasFlag(msgPerm) && controller.Value.CurrentCamera == srcToken) { try { var s = controller.Value.Client.GetStream(); s.Write(sb, 0, 4); s.Write(msgData, 0, msgData.Length); } catch { } } } } } } }
public void Disconnect() { m_running = false; lock (m_lock) { m_token = null; if (m_client != null) m_client.Close(); m_client = null; m_permissions = ControllerPermissions.None; } lock (m_dataQueueLock) { m_dataQueue = null; } lock (m_camerasListLock) { m_camerasList = null; } lock (m_imageLock) { m_image = null; } OnObtainCamerasList = null; OnReceiveImage = null; }
private void Send(MessageType msgType, ControllerPermissions msgPerm, string dstToken, byte[] msgData) { if (msgType != MessageType.Unknown && msgData != null && dstToken != null) { lock (m_controllerClientsLock) { if (!m_controllerClients.ContainsKey(dstToken)) return; ControllerItem controller = m_controllerClients[dstToken]; if (controller.Permissions.HasFlag(msgPerm)) { using (var stream = new MemoryStream()) using (var bs = new BinaryWriter(stream)) { bs.Write((int)msgType); bs.Write(msgData); msgData = stream.GetBuffer(); var sb = BitConverter.GetBytes(msgData.Length); try { var s = controller.Client.GetStream(); s.Write(sb, 0, 4); s.Write(msgData, 0, msgData.Length); } catch { } } } } } }
public bool Connect(string address, int port, string token, ControllerPermissions permissions, int receiveTimeout = 1000) { Disconnect(); lock (m_dataQueueLock) { m_dataQueue = new Queue<byte[]>(); } try { lock (m_lock) { m_client = new TcpClient(); m_client.ReceiveTimeout = receiveTimeout; m_client.NoDelay = true; m_client.Connect(address, port); if (token.Length < TOKEN_SIZE) for (int i = token.Length; i < TOKEN_SIZE; ++i) token += " "; else if (token.Length > TOKEN_SIZE) token = token.Substring(0, TOKEN_SIZE); var stream = m_client.GetStream(); var ascii = new ASCIIEncoding(); var tokenBytes = ascii.GetBytes(token); stream.Write(tokenBytes, 0, tokenBytes.Length); stream.Write(BitConverter.GetBytes((Int32)permissions), 0, 4); tokenBytes = new byte[TOKEN_SIZE]; var tokenSize = stream.Read(tokenBytes, 0, TOKEN_SIZE); if (tokenSize == TOKEN_SIZE) { lock (m_camerasListLock) { m_camerasList = new List<string>(); } m_token = ascii.GetString(tokenBytes); m_permissions = permissions; SpawnCommandsReceiverTask(); SpawnCommandsExecutorTask(); return true; } } } catch { } Disconnect(); return false; }