Server/Servers.cs
author sl
Thu, 14 Aug 2014 00:23:18 +0200
changeset 21 274a6b27c3f9
parent 20 e3d394dd0388
child 22 cac466b1b6e6
permissions -rw-r--r--
Adding server closing notification to clients.
sl@17
     1
using System;
sl@17
     2
using System.Windows.Forms;
sl@19
     3
using System.Collections;
sl@20
     4
using System.ServiceModel;
sl@21
     5
using System.Collections.Generic;
sl@21
     6
using System.Linq;
sl@17
     7
sl@17
     8
namespace SharpDisplayManager
sl@17
     9
{
sl@17
    10
    /// <summary>
sl@17
    11
    /// Implement our display service.
sl@17
    12
    /// This class is instantiated anew whenever a client send a request.
sl@17
    13
    /// </summary>
sl@20
    14
    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
sl@17
    15
    class DisplayServer : IDisplayService
sl@17
    16
    {
sl@17
    17
        //From IDisplayService
sl@19
    18
        public void SetTexts(System.Collections.Generic.IList<string> aTexts)
sl@19
    19
        {
sl@19
    20
            //Only support two lines for now
sl@19
    21
            for (int i=0; i<aTexts.Count; i++)
sl@19
    22
            {
sl@19
    23
                if (i == 0)
sl@19
    24
                {
sl@19
    25
                    Program.iMainForm.marqueeLabelTop.Text = aTexts[i];
sl@19
    26
                }
sl@19
    27
                else if (i == 1)
sl@19
    28
                {
sl@19
    29
                    Program.iMainForm.marqueeLabelBottom.Text = aTexts[i];
sl@19
    30
                }
sl@19
    31
            }
sl@19
    32
        }
sl@19
    33
        
sl@19
    34
        //
sl@17
    35
        public void SetText(int aLineIndex, string aText)
sl@17
    36
        {
sl@19
    37
            //Only support two lines for now
sl@19
    38
                if (aLineIndex == 0)
sl@19
    39
                {
sl@19
    40
                    Program.iMainForm.marqueeLabelTop.Text = aText;
sl@19
    41
                }
sl@19
    42
                else if (aLineIndex == 1)
sl@19
    43
                {
sl@19
    44
                    Program.iMainForm.marqueeLabelBottom.Text = aText;
sl@19
    45
                }
sl@17
    46
        }
sl@17
    47
sl@20
    48
        //
sl@20
    49
        public void Connect(string aClientName)
sl@20
    50
        {
sl@20
    51
            IDisplayServiceCallback callback = OperationContext.Current.GetCallbackChannel<IDisplayServiceCallback>();
sl@21
    52
            //remove the old client if any
sl@21
    53
            if (Program.iMainForm.iClients.Keys.Contains(aClientName))
sl@21
    54
            {
sl@21
    55
                Program.iMainForm.iClients.Remove(aClientName);
sl@21
    56
            }
sl@21
    57
            //Register our client
sl@21
    58
            Program.iMainForm.iClients.Add(aClientName, callback);
sl@21
    59
  
sl@21
    60
            //For some reason MP still hangs on that one
sl@21
    61
            //callback.OnConnected();
sl@20
    62
        }
sl@20
    63
sl@21
    64
sl@17
    65
    }
sl@17
    66
sl@17
    67
}