예제 #1
0
        private void SendRequest(HyperionRequest request)
        {
            try
            {
                if (_socket.Connected)
                {
                    int size = request.SerializedSize;

                    Byte[] header = new byte[4];
                    header[0] = (byte)((size >> 24) & 0xFF);
                    header[1] = (byte)((size >> 16) & 0xFF);
                    header[2] = (byte)((size >> 8) & 0xFF);
                    header[3] = (byte)((size) & 0xFF);

                    int headerSize = header.Count();
                    _stream.Write(header, 0, headerSize);
                    request.WriteTo(_stream);
                    _stream.Flush();

                    // Enable reply message if needed (debugging only)
                    //HyperionReply reply = receiveReply();
                    _isSending = false;
                }
            }
            catch (Exception e)
            {
                Log.Error("HyperionHandler - Error while sending proto request");
                Log.Error("HyperionHandler - Exception: {0}", e.Message);
                ReInitialise();
            }
            finally
            {
                _isSending = false;
            }
        }
예제 #2
0
        public static void ClearPriority(int priority)
        {
            try
            {
                if (!IsConnected())
                {
                    return;
                }

                var clearRequest = ClearRequest.CreateBuilder()
                                   .SetPriority(priority)
                                   .Build();

                var request = HyperionRequest.CreateBuilder()
                              .SetCommand(HyperionRequest.Types.Command.CLEAR)
                              .SetExtension(ClearRequest.ClearRequest_, clearRequest)
                              .Build();

                SendRequest(request);
            }
            catch (Exception ex)
            {
                Notifications.Error($"Failed to clear priority.{ex.Message}");
            }
        }
예제 #3
0
        public void ClearPriority(int priority)
        {
            try
            {
                if (!IsConnected())
                {
                    return;
                }

                if (priority == coreObject.hyperionPriority)
                {
                    _priorityCleared = true;
                }

                ClearRequest clearRequest = ClearRequest.CreateBuilder()
                                            .SetPriority(priority)
                                            .Build();

                HyperionRequest request = HyperionRequest.CreateBuilder()
                                          .SetCommand(HyperionRequest.Types.Command.CLEAR)
                                          .SetExtension(ClearRequest.ClearRequest_, clearRequest)
                                          .Build();

                SendRequest(request);
            }
            catch (Exception e)
            {
                Log.Error(string.Format("HyperionHandler - {0}", "Error clearing priority"));
                Log.Error(string.Format("HyperionHandler - {0}", e.Message));
            }
        }
예제 #4
0
        public void ChangeColor(int red, int green, int blue, int duration = -1, bool isStaticColorPriority = true)
        {
            if (!IsConnected())
            {
                return;
            }

            int priority = coreObject.hyperionPriorityStaticColor;

            if (!isStaticColorPriority)
            {
                priority = coreObject.hyperionPriority;
            }

            ColorRequest colorRequest = ColorRequest.CreateBuilder()
                                        .SetRgbColor((red * 256 * 256) + (green * 256) + blue)
                                        .SetPriority(priority)
                                        .SetDuration(duration)
                                        .Build();

            HyperionRequest request = HyperionRequest.CreateBuilder()
                                      .SetCommand(HyperionRequest.Types.Command.COLOR)
                                      .SetExtension(ColorRequest.ColorRequest_, colorRequest)
                                      .Build();

            SendRequest(request);
        }
예제 #5
0
        public void ClearAll()
        {
            if (!IsConnected())
            {
                return;
            }
            HyperionRequest request = HyperionRequest.CreateBuilder()
                                      .SetCommand(HyperionRequest.Types.Command.CLEARALL)
                                      .Build();

            SendRequest(request);
        }
예제 #6
0
        protected override void SendClearPriorityMessage()
        {
            var clearRequest = ClearRequest.CreateBuilder()
                               .SetPriority(_priority)
                               .Build();

            var request = HyperionRequest.CreateBuilder()
                          .SetCommand(HyperionRequest.Types.Command.CLEAR)
                          .SetExtension(ClearRequest.ClearRequest_, clearRequest)
                          .Build();

            SendRequest(request);
        }
예제 #7
0
        public void ChangeImage(byte[] pixeldata, byte[] bmiInfoHeader)
        {
            if (!IsConnected() && !_priorityClearing)
            {
                return;
            }

            if (!_isSending)
            {
                _isSending = true;

                // Hyperion expects the bytestring to be the size of 3*width*height.
                // So 3 bytes per pixel, as in RGB.
                // Given pixeldata however is 4 bytes per pixel, as in RGBA.
                // So we need to remove the last byte per pixel.
                byte[] newpixeldata = new byte[coreObject.GetCaptureHeight() * coreObject.GetCaptureWidth() * 3];
                int    x            = 0;
                int    i            = 0;
                while (i <= (newpixeldata.GetLength(0) - 2))
                {
                    newpixeldata[i]     = pixeldata[i + x + 2];
                    newpixeldata[i + 1] = pixeldata[i + x + 1];
                    newpixeldata[i + 2] = pixeldata[i + x];
                    i += 3;
                    x++;
                }

                ImageRequest imageRequest = ImageRequest.CreateBuilder()
                                            .SetImagedata(Google.ProtocolBuffers.ByteString.CopyFrom(newpixeldata))
                                            .SetImageheight(coreObject.GetCaptureHeight())
                                            .SetImagewidth(coreObject.GetCaptureWidth())
                                            .SetPriority(coreObject.hyperionPriority)
                                            .SetDuration(-1)
                                            .Build();

                HyperionRequest request = HyperionRequest.CreateBuilder()
                                          .SetCommand(HyperionRequest.Types.Command.IMAGE)
                                          .SetExtension(ImageRequest.ImageRequest_, imageRequest)
                                          .Build();

                Thread t = new Thread(() => SendRequest(request))
                {
                    IsBackground = true
                };
                t.Start();
            }
        }
예제 #8
0
        public void SendImageToServer(byte[] pixeldata, int width, int height)
        {
            var imageRequest = ImageRequest.CreateBuilder()
                               .SetImagedata(ByteString.CopyFrom(pixeldata))
                               .SetImageheight(height)
                               .SetImagewidth(width)
                               .SetPriority(_priority)
                               .SetDuration(_messageDuration)
                               .Build();

            var request = HyperionRequest.CreateBuilder()
                          .SetCommand(HyperionRequest.Types.Command.IMAGE)
                          .SetExtension(ImageRequest.ImageRequest_, imageRequest)
                          .Build();

            SendRequest(request);
        }
예제 #9
0
        private void ClearPriority()
        {
            if (!IsConnected())
            {
                return;
            }

            var clearRequest = ClearRequest.CreateBuilder()
                               .SetPriority(_priority)
                               .Build();

            var request = HyperionRequest.CreateBuilder()
                          .SetCommand(HyperionRequest.Types.Command.CLEAR)
                          .SetExtension(ClearRequest.ClearRequest_, clearRequest)
                          .Build();

            SendRequest(request);
        }
예제 #10
0
        public void SendImageToServer(byte[] pixeldata)
        {
            try
            {
                var imageRequest = ImageRequest.CreateBuilder()
                                   .SetImagedata(ByteString.CopyFrom(pixeldata))
                                   .SetImageheight(Form1.HyperionHeight)
                                   .SetImagewidth(Form1.HyperionWidth)
                                   .SetPriority(_hyperionPriority)
                                   .SetDuration(Form1.HyperionMessageDuration)
                                   .Build();

                var request = HyperionRequest.CreateBuilder()
                              .SetCommand(HyperionRequest.Types.Command.IMAGE)
                              .SetExtension(ImageRequest.ImageRequest_, imageRequest)
                              .Build();

                SendRequest(request);
            }
            catch (Exception) {
            }
        }
예제 #11
0
        public void ClearPriority(int priority)
        {
            try
            {
                if (!IsConnected())
                {
                    return;
                }

                ClearRequest clearRequest = ClearRequest.CreateBuilder()
                                            .SetPriority(priority)
                                            .Build();

                HyperionRequest request = HyperionRequest.CreateBuilder()
                                          .SetCommand(HyperionRequest.Types.Command.CLEAR)
                                          .SetExtension(ClearRequest.ClearRequest_, clearRequest)
                                          .Build();

                SendRequest(request);
            }
            catch (Exception) {
            }
        }
예제 #12
0
        public static void SendImageToServer(byte[] pixeldata)
        {
            try
            {
                var imageRequest = ImageRequest.CreateBuilder()
                                   .SetImagedata(ByteString.CopyFrom(pixeldata))
                                   .SetImageheight(Settings.HyperionHeight)
                                   .SetImagewidth(Settings.HyperionWidth)
                                   .SetPriority(_hyperionPriority)
                                   .SetDuration(Settings.HyperionMessageDuration)
                                   .Build();

                var request = HyperionRequest.CreateBuilder()
                              .SetCommand(HyperionRequest.Types.Command.IMAGE)
                              .SetExtension(ImageRequest.ImageRequest_, imageRequest)
                              .Build();

                SendRequest(request);
            }
            catch (Exception ex)
            {
                Notifications.Error($"Failed to send image to server.{ex.Message}");
            }
        }
예제 #13
0
    private void SendRequest(HyperionRequest request)
    {
      try
      {
        if (Socket.Connected)
        {
          int size = request.SerializedSize;

          Byte[] header = new byte[4];
          header[0] = (byte)((size >> 24) & 0xFF);
          header[1] = (byte)((size >> 16) & 0xFF);
          header[2] = (byte)((size >> 8) & 0xFF);
          header[3] = (byte)((size) & 0xFF);

          int headerSize = header.Count();
          Stream.Write(header, 0, headerSize);
          request.WriteTo(Stream);
          Stream.Flush();

          // Enable reply message if needed (debugging only)
          //HyperionReply reply = receiveReply();
        }
      }
      catch (Exception e)
      {
        Log.Error("HyperionHandler - Error while sending proto request");
        Log.Error("HyperionHandler - Exception: {0}", e.Message);

        ReInitialise(false);
      }
    }