diff -r 92f19af39024 -r f4e52a4c34b3 middleware/src/Communication/TuioServer.cs --- a/middleware/src/Communication/TuioServer.cs Thu Mar 15 13:33:21 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Net; -using System.Text; - -using Bespoke.Common.Osc; - -namespace Tuio -{ - /// - /// Simple, still uncomplete implementation of a TUIO server in C#. - /// - /// Current shortcomings: - /// Object support missing. - /// Does not implement frame times. - /// Only supports external TUIO cursors. - /// Allways commits all cursors. - /// - /// (c) 2010 by Dominik Schmidt (schmidtd@comp.lancs.ac.uk) - /// - public class TuioServer - { - #region constants - - private const string _cursorAddressPattern = "/tuio/2Dcur"; - - private const string _objectAddressPattern = "/tuio/2Dobj"; - - #endregion - - #region fields - - private IPEndPoint _ipEndPoint; - - private Dictionary _cursors; - - private int _currentFrame; - - #endregion - - #region constructors - - /// - /// Creates a new server with and endpoint at localhost, port 3333. - /// - public TuioServer() : this("127.0.0.1", 3333) { } - - /// - /// Creates a new server. - /// - /// Endpoint host - /// Endpoint port - public TuioServer(string host, int port) - { - _cursors = new Dictionary(); - _ipEndPoint = new IPEndPoint(IPAddress.Parse(host), port); - _currentFrame = 0; - } - - #endregion - - #region frame related methods - - /// - /// Initialized a new frame and increases the frame counter. - /// - public void InitFrame() - { - _currentFrame++; - } - - /// - /// Commits the current frame. - /// - public void CommitFrame() - { - GetFrameBundle().Send(_ipEndPoint); - } - - #endregion - - #region cursor related methods - - /// - /// Adds a TUIO cursor. A new id, not used before, must be provided. - /// - /// New id - /// Location - public void AddTuioCursor(int id, PointF location) - { - lock(_cursors) - if(!_cursors.ContainsKey(id)) - _cursors.Add(id, new TuioCursor(id, location)); - } - - /// - /// Updates a TUIO cursor. An id of an existing cursor must be provided. - /// - /// Id - /// Location - public void UpdateTuioCursor(int id, PointF location) - { - TuioCursor cursor; - if(_cursors.TryGetValue(id, out cursor)) - cursor.Location = location; - } - - /// - /// Deletes a TUIO cursor. An id of an existing cursor must be provided. - /// - /// Id - public void DeleteTuioCursor(int id) - { - lock (_cursors) - _cursors.Remove(id); - } - - #endregion - - #region osc message assembly - - private OscBundle GetFrameBundle() - { - OscBundle bundle = new OscBundle(_ipEndPoint); - - bundle.Append(GetAliveMessage()); - foreach (OscMessage msg in GetCursorMessages()) - bundle.Append(msg); - bundle.Append(GetSequenceMessage()); - - return bundle; - } - - private OscMessage GetAliveMessage() - { - OscMessage msg = new OscMessage(_ipEndPoint, _cursorAddressPattern); - - msg.Append("alive"); - lock (_cursors) - foreach (TuioCursor cursor in _cursors.Values) - msg.Append((Int32)cursor.Id); - - return msg; - } - - private OscMessage GetSequenceMessage() - { - OscMessage msg = new OscMessage(_ipEndPoint, _cursorAddressPattern); - - msg.Append("fseq"); - msg.Append((Int32)_currentFrame); - - return msg; - } - - private OscMessage GetCursorMessage(TuioCursor cursor) - { - OscMessage msg = new OscMessage(_ipEndPoint, _cursorAddressPattern); - - msg.Append("set"); - msg.Append((Int32)cursor.Id); - msg.Append(cursor.Location.X); - msg.Append(cursor.Location.Y); - msg.Append(cursor.Speed.X); - msg.Append(cursor.Speed.Y); - msg.Append(cursor.MotionAcceleration); - - return msg; - } - - private IEnumerable GetCursorMessages() - { - List msgs = new List(); - - lock (_cursors) - foreach (TuioCursor cursor in _cursors.Values) - msgs.Add(GetCursorMessage(cursor)); - - return msgs.AsEnumerable(); - } - - #endregion - } -}