コード例 #1
0
        protected override void OnStart(string[] args)
        {
            var version_strings = Assembly.GetExecutingAssembly().GetName().Version.ToString().Split('.');
            var version_string  = "DeviceServer v" + version_strings[0] + "." + version_strings[1] + " Prerelease " + version_strings[2] + "." + version_strings[3];

            logger.AppendLog(DateTime.Now, version_string);
            logger.AppendLog(DateTime.Now, "Service - Starting");

            DeviceConnectionManager.Start();
            ServerAdvertiser.Start();
            ServerListener.Start();

            logger.AppendLog(DateTime.Now, "Service - Started");
        }
コード例 #2
0
        public DeviceServer()
        {
            InitializeComponent();

            var version_strings = Assembly.GetExecutingAssembly().GetName().Version.ToString().Split('.');
            var version_string  = "DeviceServer v" + version_strings[0] + "." + version_strings[1] + " Prerelease " + version_strings[2] + "." + version_strings[3];

            logger.AppendLog(DateTime.Now, version_string);
            logger.AppendLog(DateTime.Now, "Service - Starting");

            DeviceConnectionManager.Start();
            ServerAdvertiser.Start();
            ServerListener.Start();

            logger.AppendLog(DateTime.Now, "Service - Started");
        }
コード例 #3
0
        protected override void OnStop()
        {
            Task.Run(() =>
            {
                var version_strings = Assembly.GetExecutingAssembly().GetName().Version.ToString().Split('.');
                var version_string  = "DeviceServer v" + version_strings[0] + "." + version_strings[1] + " Prerelease " + version_strings[2] + "." + version_strings[3];

                logger.AppendLog(DateTime.Now, version_string);
                logger.AppendLog(DateTime.Now, "Service - Stopping");

                var handle = ServerListener.Stop();
                handle.WaitOne();

                handle = ServerAdvertiser.Stop();
                handle.WaitOne();

                handle = DeviceConnectionManager.Stop();
                handle.WaitOne();

                logger.AppendLog(DateTime.Now, "Service - Stopped");
            });
        }
コード例 #4
0
        public static void HandleClient(TcpClient client)
        {
            Task.Run(() =>
            {
                DeviceServer.logger.AppendLog("SL - Client Connected");

                while (true)
                {
                    CommandTransactionContainer ctc = null;

                    try
                    {
                        ctc = (CommandTransactionContainer)XMLSerdes.Decode(XMLSerdes.ReceivePacket(client, typeof(CommandTransactionContainer)), typeof(CommandTransactionContainer));
                    }
                    catch (Exception ex)
                    {
                        DeviceServer.logger.AppendLog("SL - An exception occured while attempting to deserialize received container.");

                        DeviceServer.logger.AppendLog(ex.Message);

                        break;
                    }

                    if (ctc != null)
                    {
                        DeviceServer.logger.AppendLog("SL - Opening Device Connection");

                        var connection = DeviceConnectionManager.GetConnecion(ctc.DeviceID);

                        var handles = connection.EnqueueCommands(ctc.ExpanderCommands);

                        var sw = new Stopwatch();
                        sw.Start();
                        var t       = new System.Timers.Timer(1000);
                        t.AutoReset = true;
                        t.Elapsed  += (a, b) => { DeviceServer.logger.AppendLog("SL - Waiting for command execution to complete." + TimeSpan.FromTicks(sw.ElapsedTicks).ToString()); };
                        t.Start();

                        foreach (var handle in handles)
                        {
                            handle.Handle.WaitOne();
                        }

                        sw.Stop();
                        t.Stop();

                        DeviceServer.logger.AppendLog("SL - Command Execution Complete");

                        var commands = handles.Select(x => x.Command).ToArray();

                        var r_ctc = new CommandTransactionContainer(ctc.DeviceID, commands);

                        try
                        {
                            XMLSerdes.SendPacket(client, r_ctc);
                        }
                        catch (Exception ex)
                        {
                            DeviceServer.logger.AppendLog("SL - An exception occured while attempting to serialize transmit container.");

                            DeviceServer.logger.AppendLog(ex.Message);

                            break;
                        }
                    }

                    break;
                }

                try
                {
                    if (client != null && client.Connected)
                    {
                        client.Close();
                    }
                }
                catch (Exception ex) { }
            });
        }