Example #1
0
 public ControllerItem(string token, TcpClient client, ControllerPermissions permissions)
 {
     Token = token;
     Client = client;
     Permissions = permissions;
     CurrentCamera = null;
 }
Example #2
0
 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 { }
                     }
                 }
             }
         }
     }
 }
Example #3
0
 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;
 }
Example #4
0
 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 { }
                 }
             }
         }
     }
 }
Example #5
0
 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;
 }