Example #1
0
        public static ControllerConfig ReadConfig(string path)
        {
            FileInfo file = new FileInfo(path);

            XmlSerializer    xml = new XmlSerializer(typeof(ControllerConfig));
            ControllerConfig cfg = new ControllerConfig();

            if (!file.Exists)
            {
                cfg.ListenPrefixes.Add("http://localhost:80");
                HostConnection c = new HostConnection();
                c.Name        = "A host";
                c.CryptoCache = new RijndaelManaged();
                c.CryptoKey   = EncodingTools.Encryption.GetTokenSalt(c.CryptoCache);

                cfg.Hosts.Add(c);

                cfg.RootTempFolder = Path.GetTempPath();

                var fs = file.OpenWrite();
                xml.Serialize(fs, cfg);
                fs.Close();
            }
            else
            {
                var fs = file.OpenText();
                cfg = xml.Deserialize(fs) as ControllerConfig;
                fs.Close();
            }

            return(cfg);
        }
        public AddHostViewModel(INavigation navigation)
        {
            Title = "Add Host";

            HostConnection = new HostConnection();

            _navigation = navigation;

            AddHostCommand = new RelayCommand(async() => await ExecuteAddHostCommand(), CanExecuteAddHostCommand);
        }
Example #3
0
        public void AddHost(HostConnection host)
        {
            _hostStates.TryAdd(host.Id, new HostState(host));

            // This part of the code is not concurrent, but only ASP.NET uses concurrent calls, MVVM projects are not.
            // ASP.NET don't use ObservableCollections
            if (_useObservableCollections)
            {
                Hosts.Add(new ObservableHost(GetHostState(host.Id)));
            }
        }
        public void Equal_Ok()
        {
            const string host = "localhost";
            const int    port = 5432;

            var hostConnection = new HostConnection(host, port);

            int hostConnectionHash = HashCode.Combine(host, port);

            Assert.Equal(hostConnectionHash, hostConnection.GetHashCode());
        }
        public void GetHostConnection_Ok()
        {
            const string host = "localhost";
            const string port = "5032";

            var hostConnectionResult = DatabaseConnectionFactory.GetHostConnection(host, port);

            var hostConnectionAssert = new HostConnection(host, Int32.Parse(port));

            Assert.True(hostConnectionResult.OkStatus);
            Assert.True(hostConnectionAssert.Equals(hostConnectionResult.Value));
        }
Example #6
0
        public void UpdateHost(HostConnection host)
        {
            var found = _hostStates.TryGetValue(host.Id, out HostState hostState);

            if (found)
            {
                hostState.Update(host);
            }

            // This part of the code is not concurrent, but only ASP.NET uses concurrent calls, MVVM projects are not.
            // ASP.NET don't use ObservableCollections
            UpdateObservableHost(hostState);
        }
Example #7
0
        /// <summary>
        /// Add connection settings for a new host.
        /// </summary>
        /// <param name="host">The host name</param>
        /// <param name="messengerFactory">Factory for creating a messenger which forwards messages to the host</param>
        public void AddConnection(string host, Func <IMessenger> messengerFactory)
        {
            var hostConnection = new HostConnection {
                Host = host, MessengerFactory = messengerFactory
            };

            this.hosts[hostConnection.Host] = hostConnection;
            if (hostConnection.Messenger != null)
            {
                hostConnection.Messenger.MessageReceived         += (sender, @event) => MessageReceived?.Invoke(this, @event);
                hostConnection.Messenger.ConnectionReestablished += (sender, @event) => ConnectionReestablished?.Invoke(this, @event);
            }
        }
Example #8
0
 private void TryConnect(HostConnection hostConnection)
 {
     try
     {
         hostConnection.Messenger = hostConnection.MessengerFactory();
         hostConnection.Messenger.MessageReceived         += (sender, @event) => MessageReceived?.Invoke(this, @event);
         hostConnection.Messenger.ConnectionReestablished += (sender, @event) => ConnectionReestablished?.Invoke(this, @event);
     }
     catch (Exception ex)
     {
         Log.Warning(ex.Message);
     }
 }
Example #9
0
        public static IList <IPO> GetNextPO(long value, POValueType valueType, int facilityNumber = 960)
        {
            List <IPO> poList = new List <IPO>();

            string whereClause = string.Empty;

            switch (valueType)
            {
            case POValueType.VBU_UNKNOWN:
            case POValueType.HOVBU:
                long vbu = GetSFVBU(value, facilityNumber);
                value = vbu == -1? value : vbu;
                goto case POValueType.SFVBU;

            case POValueType.PO:
                PO tempPO = new PO(value);
                value = tempPO.ShipFromVBU;
                goto case POValueType.SFVBU;

            case POValueType.SFVBU:
                whereClause = "(((LOWES.W001_PO_DAL_HDR.T063_LCT_NBR)={1}) " +
                              "AND ((LOWES.W001_PO_DAL_HDR.RCP_CD_TXT)='N') " +
                              "AND ((LOWES.W001_PO_DAL_HDR.P028_VND_NBR)={0}) " +
                              "AND ((LOWES.W002_PO_DAL_DTL.RCV_QTY)=0))";
                break;

            case POValueType.ITEM:

                whereClause = "(((LOWES.W002_PO_DAL_DTL.T063_LCT_NBR)={1}) " +
                              "AND LOWES.W002_PO_DAL_DTL.RCV_QTY = 0 " +
                              "AND ((LOWES.W002_PO_DAL_DTL.T024_ITM_NBR)={0}) " +
                              "AND ((LOWES.W001_PO_DAL_HDR.RCP_CD_TXT)='N'))";
                break;

            default:
                break;
            }

            whereClause = string.Format(whereClause, value, facilityNumber);
            ADODB.Recordset rs = HostConnection.GetInstance().Recordset(string.Format(Properties.Resources.GetNextAvailPO, whereClause));

            if (!(rs.BOF && rs.EOF))
            {
                poList = rs.GetPOsFromList().ToList();

                rs.Close();
                rs = null;
            }
            return(poList);
        }
Example #10
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            HostConnection = await _context.Host.FirstOrDefaultAsync(m => m.Id == id);

            if (HostConnection == null)
            {
                return(NotFound());
            }
            return(Page());
        }
Example #11
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            HostConnection = await _context.Host.FindAsync(id);

            if (HostConnection != null)
            {
                _context.Host.Remove(HostConnection);
                await _context.SaveChangesAsync();

                _manager.RemoveHost(HostConnection.Id);
            }

            return(RedirectToPage("./Index"));
        }
Example #12
0
    // checks whether face params data was requested by any connection
    private bool IsFaceParamsRequested()
    {
        bool bFaceParams = false;

        foreach (int connId in alConnectionId)
        {
            HostConnection conn = dictConnection [connId];

            if (conn.keepAlive && conn.reqDataType != null)
            {
                if (conn.reqDataType.Contains(",fp"))
                {
                    bFaceParams = true;
                    break;
                }
            }
        }

        return(bFaceParams);
    }
Example #13
0
        private static long GetSFVBU(long HOVBU, int facilityNumber)
        {
            string sql = Properties.Resources.FindSFVBU;

            sql = string.Format(sql, HOVBU, facilityNumber);

            ADODB.Recordset rs = HostConnection.GetInstance().Recordset(sql);

            if (rs.BOF && rs.EOF)
            {
                return(-1);
            }

            long VBU = (long)rs.Fields[0].Value;

            rs.Close();
            rs = null;

            return(VBU);
        }
Example #14
0
        /// <summary>
        /// Ensure everything is set to run the Application.
        /// - Ensure database folder exists.
        /// - Ensure the database is created and up to date.
        /// - Initialize BoincManager
        /// </summary>
        /// <param name="context"></param>
        /// <param name="manager"></param>
        /// <param name="useObservableCollections">Initialize the Observable Collections which can be used in MVVM framework.</param>
        public static void InitializeApplication(ApplicationDbContext context, Manager manager, bool useObservableCollections)
        {
            // Ensure the database is created and up to date at the start of the application
            context.Database.Migrate();

            // If the database is empty, add localhost to it.
            var hosts = context.Host.ToList();

            if (hosts.Count == 0)
            {
                var localhostPassword = GetLocalhostGuiRpcPassword();
                if (!string.IsNullOrEmpty(localhostPassword))
                {
                    var host = new HostConnection("Localhost", "localhost", localhostPassword);
                    context.Add(host);
                    context.SaveChanges();
                    hosts = context.Host.ToList();
                }
            }

            // Initialize the BoincManager
            manager.Initialize(hosts, useObservableCollections);
        }
Example #15
0
    void Update()
    {
        int recHostId;
        int connectionId;
        int recChannelId;
        int dataSize;

        bool connListUpdated = false;

        if (backgroundImage && backgroundImage.texture == null)
        {
            backgroundImage.texture = manager ? manager.GetUsersLblTex() : null;
        }

        if (faceManager == null)
        {
            faceManager = FacetrackingManager.Instance;
        }

        if (gestureManager == null)
        {
            gestureManager = VisualGestureManager.Instance;
        }

        if (speechManager == null)
        {
            speechManager = SpeechManager.Instance;
        }

        try
        {
            byte             error   = 0;
            NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out recChannelId, recBuffer, bufferSize, out dataSize, out error);

            switch (recData)
            {
            case NetworkEventType.Nothing:                     //1
                break;

            case NetworkEventType.ConnectEvent:                //2
                if (recHostId == serverHostId && recChannelId == serverChannelId &&
                    !dictConnection.ContainsKey(connectionId))
                {
                    HostConnection conn = new HostConnection();
                    conn.hostId       = recHostId;
                    conn.connectionId = connectionId;
                    conn.channelId    = recChannelId;
                    conn.keepAlive    = true;
                    conn.reqDataType  = "ka,kb,km,kh";
                    //conn.matrixSent = false;

                    dictConnection[connectionId] = conn;
                    connListUpdated = true;

                    //LogToConsole(connectionId + "-conn: " + conn.reqDataType);
                }

//				// reset chunked face messages
//				sendFvMsg = string.Empty;
//				sendFvNextOfs = 0;
//
//				sendFtMsg = string.Empty;
//				sendFtNextOfs = 0;
                break;

            case NetworkEventType.DataEvent:                   //3
                if (recHostId == serverHostId && recChannelId == serverChannelId &&
                    dictConnection.ContainsKey(connectionId))
                {
                    HostConnection conn = dictConnection[connectionId];

                    int decompSize = 0;
                    if (decompressor != null && (recBuffer[0] > 127 || recBuffer[0] < 32))
                    {
                        decompSize = decompressor.Decompress(recBuffer, 0, compressBuffer, 0, dataSize);
                    }
                    else
                    {
                        System.Buffer.BlockCopy(recBuffer, 0, compressBuffer, 0, dataSize);
                        decompSize = dataSize;
                    }

                    string sRecvMessage = System.Text.Encoding.UTF8.GetString(compressBuffer, 0, decompSize);

                    if (sRecvMessage.StartsWith("ka"))
                    {
                        if (sRecvMessage == "ka")                         // vr-examples v1.0 keep-alive message
                        {
                            sRecvMessage = "ka,kb,km,kh";
                        }

                        conn.keepAlive               = true;
                        conn.reqDataType             = sRecvMessage;
                        dictConnection[connectionId] = conn;

                        //LogToConsole(connectionId + "-recv: " + conn.reqDataType);

                        // check for SR phrase-reset
                        int iIndexSR = sRecvMessage.IndexOf(",sr");
                        if (iIndexSR >= 0 && speechManager)
                        {
                            speechManager.ClearPhraseRecognized();
                            //LogToConsole("phrase cleared");
                        }
                    }
                }
                break;

            case NetworkEventType.DisconnectEvent:             //4
                if (dictConnection.ContainsKey(connectionId))
                {
                    dictConnection.Remove(connectionId);
                    connListUpdated = true;
                }
                break;
            }

            if (connListUpdated)
            {
                // get all connection IDs
                alConnectionId.Clear();
                alConnectionId.AddRange(dictConnection.Keys);

                // display the number of connections
                StringBuilder sbConnStatus = new StringBuilder();
                sbConnStatus.AppendFormat("Server running: {0} connection(s)", dictConnection.Count);

                foreach (int connId in dictConnection.Keys)
                {
                    HostConnection conn = dictConnection[connId];
                    int            iPort = 0; string sAddress = string.Empty; NetworkID network; NodeID destNode;

                    NetworkTransport.GetConnectionInfo(conn.hostId, conn.connectionId, out sAddress, out iPort, out network, out destNode, out error);
                    if (error == (int)NetworkError.Ok)
                    {
                        sbConnStatus.AppendLine().Append("    ").Append(sAddress).Append(":").Append(iPort);
                    }
                }

                LogToConsole(sbConnStatus.ToString());

                if (connStatusText)
                {
                    connStatusText.text = sbConnStatus.ToString();
                }
            }

            // send body frame to available connections
            const char delimiter  = ',';
            string     sBodyFrame = manager ? manager.GetBodyFrameData(ref liRelTime, ref fCurrentTime, delimiter) : string.Empty;

            if (sBodyFrame.Length > 0 && dictConnection.Count > 0)
            {
                StringBuilder sbSendMessage        = new StringBuilder();
                bool          bFaceParamsRequested = IsFaceParamsRequested();

                sbSendMessage.Append(manager.GetWorldMatrixData(delimiter)).Append('|');
                sbSendMessage.Append(sBodyFrame).Append('|');
                sbSendMessage.Append(manager.GetBodyHandData(ref liRelTime, delimiter)).Append('|');

                if (bFaceParamsRequested && faceManager && faceManager.IsFaceTrackingInitialized())
                {
                    sbSendMessage.Append(faceManager.GetFaceParamsAsCsv(delimiter)).Append('|');
                }

                if (gestureManager && gestureManager.IsVisualGestureInitialized())
                {
                    sbSendMessage.Append(gestureManager.GetGestureDataAsCsv(delimiter)).Append('|');
                }

                if (speechManager && speechManager.IsSapiInitialized())
                {
                    sbSendMessage.Append(speechManager.GetSpeechDataAsCsv(delimiter)).Append('|');
                }

                if (sbSendMessage.Length > 0 && sbSendMessage[sbSendMessage.Length - 1] == '|')
                {
                    sbSendMessage.Remove(sbSendMessage.Length - 1, 1);
                }

                byte[] btSendMessage = System.Text.Encoding.UTF8.GetBytes(sbSendMessage.ToString());

                //Debug.Log("Message " + sbSendMessage.Length + " chars: " + sbSendMessage.ToString());
                //Debug.Log("Encoded into " + btSendMessage.Length + " bytes: " + ByteArrayToString(btSendMessage, btSendMessage.Length));

                int compSize = 0;
                if (compressor != null && btSendMessage.Length > 100 && !websocketHost)
                {
                    compSize = compressor.Compress(btSendMessage, 0, btSendMessage.Length, compressBuffer, 0);
                }
                else
                {
                    System.Buffer.BlockCopy(btSendMessage, 0, compressBuffer, 0, btSendMessage.Length);
                    compSize = btSendMessage.Length;
                }

                //Debug.Log("Compressed into " + compSize + " bytes: " + ByteArrayToString(compressBuffer, compSize));

//				// check face-tracking requests
//				bool bFaceParams = false, bFaceVertices = false, bFaceUvs = false, bFaceTriangles = false;
//				if(faceManager && faceManager.IsFaceTrackingInitialized())
//					CheckFacetrackRequests(out bFaceParams, out bFaceVertices, out bFaceUvs, out bFaceTriangles);
//
//				byte[] btFaceParams = null;
//				if(bFaceParams)
//				{
//					string sFaceParams = faceManager.GetFaceParamsAsCsv();
//					if(!string.IsNullOrEmpty(sFaceParams))
//						btFaceParams = System.Text.Encoding.UTF8.GetBytes(sFaceParams);
//				}
//
//				// next chunk of data for face vertices
//				byte[] btFaceVertices = null;
//				string sFvMsgHead = string.Empty;
//				GetNextFaceVertsChunk(bFaceVertices, bFaceUvs, ref btFaceVertices, out sFvMsgHead);
//
//				// next chunk of data for face triangles
//				byte[] btFaceTriangles = null;
//				string sFtMsgHead = string.Empty;
//				GetNextFaceTrisChunk(bFaceTriangles, ref btFaceTriangles, out sFtMsgHead);

                foreach (int connId in alConnectionId)
                {
                    HostConnection conn = dictConnection[connId];

                    if (conn.keepAlive)
                    {
                        conn.keepAlive         = false;
                        dictConnection[connId] = conn;

                        if (conn.reqDataType != null && conn.reqDataType.Contains("kb,"))
                        {
                            //LogToConsole(conn.connectionId + "-sendkb: " + conn.reqDataType);

                            error = 0;
                            //if(!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, btSendMessage, btSendMessage.Length, out error))
                            if (!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, compressBuffer, compSize, out error))
                            {
                                string sMessage = "Error sending body data via conn " + conn.connectionId + ": " + (NetworkError)error;
                                LogErrorToConsole(sMessage);

                                if (serverStatusText)
                                {
                                    serverStatusText.text = sMessage;
                                }
                            }
                        }

//						if(bFaceParams && btFaceParams != null &&
//							conn.reqDataType != null && conn.reqDataType.Contains("fp,"))
//						{
//							//Debug.Log(conn.connectionId + "-sendfp: " + conn.reqDataType);
//
//							error = 0;
//							if(!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, btFaceParams, btFaceParams.Length, out error))
//							{
//								string sMessage = "Error sending face params via conn " + conn.connectionId + ": " + (NetworkError)error;
//								Debug.LogError(sMessage);
//
//								if(serverStatusText)
//								{
//									serverStatusText.text = sMessage;
//								}
//							}
//						}
//
//						if(bFaceVertices && btFaceVertices != null &&
//							conn.reqDataType != null && conn.reqDataType.Contains("fv,"))
//						{
//							//Debug.Log(conn.connectionId + "-sendfv: " + conn.reqDataType + " - " + sFvMsgHead);
//
//							error = 0;
//							if(!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, btFaceVertices, btFaceVertices.Length, out error))
//							{
//								string sMessage = "Error sending face verts via conn " + conn.connectionId + ": " + (NetworkError)error;
//								Debug.LogError(sMessage);
//
//								if(serverStatusText)
//								{
//									serverStatusText.text = sMessage;
//								}
//							}
//						}
//
//						if(bFaceTriangles && btFaceTriangles != null &&
//							conn.reqDataType != null && conn.reqDataType.Contains("ft,"))
//						{
//							//Debug.Log(conn.connectionId + "-sendft: " + conn.reqDataType + " - " + sFtMsgHead);
//
//							error = 0;
//							if(!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, btFaceTriangles, btFaceTriangles.Length, out error))
//							{
//								string sMessage = "Error sending face tris via conn " + conn.connectionId + ": " + (NetworkError)error;
//								Debug.LogError(sMessage);
//
//								if(serverStatusText)
//								{
//									serverStatusText.text = sMessage;
//								}
//							}
//						}
                    }
                }
            }
        }
        catch (System.Exception ex)
        {
            LogErrorToConsole(ex.Message + "\n" + ex.StackTrace);

            if (serverStatusText)
            {
                serverStatusText.text = ex.Message;
            }
        }
    }
Example #16
0
        private string GetDescription()
        {
            string sql = string.Empty;

            ADODB.Recordset rs;

            switch (ItemTypeID)
            {
            case 1:
                if (DMSConnection.GetInstance().Connection != null)
                {
                    sql = "SELECT itm_desc FROM dbo.item WHERE itm_num=" + Value;
                }
                else if (HostConnection.GetInstance().Connection != null)
                {
                    sql = "SELECT ITM_DES_TXT FROM Lowes.T024_ITM WHERE T024_ITM_NBR=" + Value;
                }
                break;

            case 2:
                if (DMSConnection.GetInstance().Connection != null)
                {
                    sql = "SELECT vnd_nme FROM dbo.e537a_rcv_hdr WHERE e058_po_nbr =" + Value;
                }
                else if (HostConnection.GetInstance().Connection != null)
                {
                    sql = "SELECT VND_NME FROM Lowes.W001_PO_DAL_HDR WHERE E058_PO_NBR=" + Value;
                }
                break;

            case 3:
                Facility fac = new Facility().Where("fac_num=" + Value).SingleOrDefault();
                return(fac == null ? string.Empty : fac.Name);

            case 4:
                string retVal = "Unknown vendor.";

                if (HostConnection.GetInstance().Connection != null)
                {
                    sql = "SELECT VBU_NME FROM LOWES.T616_VBU WHERE T616_VBU_NBR=" + Value + " AND T617_FNC_TYP_CD=1";
                    try
                    {
                        retVal = HostConnection.GetInstance().Recordset(sql).Fields[0].Value.ToString();
                    }
                    catch (Exception) { retVal = "Unknown Vendor."; }
                }
                return(retVal);

            default:
                return("Unknown.");
            }

            if (DMSConnection.GetInstance().Connection != null)
            {
                rs = DMSConnection.GetInstance().Recordset(sql);
            }
            else
            {
                rs = HostConnection.GetInstance().Recordset(sql);
            }

            string output;

            try
            {
                if (!(rs.BOF && rs.EOF))
                {
                    output = rs.Fields[0].Value.ToString();
                }
                else
                {
                    output = "Unknown.";
                }
            }
            catch (Exception) { output = "Unknown error occured."; }
            rs.Close();
            rs = null;
            //string output = "Not implimented yet.";
            return(output);
        }
 static HostConnection()
 {
     _instance = new HostConnection();
 }
    void Update()
    {
        int recHostId;
        int connectionId;
        int recChannelId;
        int dataSize;

        bool connListUpdated = false;

        //		if(manager == null)
        //		{
        //			manager = KinectManager.Instance;
        //		}

        if(backgroundImage && backgroundImage.texture == null)
        {
            backgroundImage.texture = manager ? manager.GetUsersLblTex() : null;
        }

        try
        {
            byte error = 0;
            NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out recChannelId, recBuffer, bufferSize, out dataSize, out error);

            switch (recData)
            {
            case NetworkEventType.Nothing:         //1
                break;
            case NetworkEventType.ConnectEvent:    //2
                if(recHostId == serverHostId && recChannelId == serverChannelId &&
                    !dictConnection.ContainsKey(connectionId))
                {
                    HostConnection conn = new HostConnection();
                    conn.hostId = recHostId;
                    conn.connectionId = connectionId;
                    conn.channelId = recChannelId;
                    conn.keepAlive = true;
                    //conn.matrixSent = false;

                    dictConnection[connectionId] = conn;
                    connListUpdated = true;
                }
                break;
            case NetworkEventType.DataEvent:       //3
                if(recHostId == serverHostId && recChannelId == serverChannelId &&
                    dictConnection.ContainsKey(connectionId))
                {
                    HostConnection conn = dictConnection[connectionId];
                    string sRecvMessage = System.Text.Encoding.UTF8.GetString(recBuffer, 0, dataSize);

                    if(sRecvMessage == "ka")
                    {
                        conn.keepAlive = true;
                        dictConnection[connectionId] = conn;
                    }
                }
                break;
            case NetworkEventType.DisconnectEvent: //4
                if(dictConnection.ContainsKey(connectionId))
                {
                    dictConnection.Remove(connectionId);
                    connListUpdated = true;
                }
                break;
            }

            if(connListUpdated)
            {
                // get all connection IDs
                alConnectionId.Clear();
                alConnectionId.AddRange(dictConnection.Keys);

                // display the number of connections
                StringBuilder sbConnStatus = new StringBuilder();
                sbConnStatus.AppendFormat("Server running: {0} connection(s)", dictConnection.Count);

                Debug.Log(sbConnStatus);

                if(statusText)
                {
                    statusText.text = sbConnStatus.ToString();
                }
            }

            // send body frame to available connections
            string sBodyFrame = manager ? manager.GetBodyFrameData(ref liRelTime, ref fCurrentTime) : string.Empty;

            if(sBodyFrame.Length > 0 && dictConnection.Count > 0)
            {
                StringBuilder sbSendMessage = new StringBuilder();

                sbSendMessage.Append(manager.GetWorldMatrixData()).Append('|');
                sbSendMessage.Append(sBodyFrame).Append('|');
                sbSendMessage.Append(manager.GetBodyHandData(ref liRelTime)).Append('|');

                if(sbSendMessage.Length > 0 && sbSendMessage[sbSendMessage.Length - 1] == '|')
                {
                    sbSendMessage.Remove(sbSendMessage.Length - 1, 1);
                }

                byte[] btSendMessage = System.Text.Encoding.UTF8.GetBytes(sbSendMessage.ToString());

                foreach(int connId in alConnectionId)
                {
                    HostConnection conn = dictConnection[connId];

                    if(conn.keepAlive)
                    {
                        conn.keepAlive = false;
                        dictConnection[connId] = conn;

                        error = 0;
                        if(!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, btSendMessage, btSendMessage.Length, out error))
                        {
                            Debug.LogError("Error sending packet via connection " + conn.connectionId + ": " + (NetworkError)error);
                        }
                    }
                }
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError(ex.Message + "\n" + ex.StackTrace);

            if(statusText)
            {
                statusText.text = ex.Message;
            }
        }
    }
Example #19
0
    void Update()
    {
        int recHostId;
        int connectionId;
        int recChannelId;
        int dataSize;

        bool connListUpdated = false;

//		if(manager == null)
//		{
//			manager = KinectManager.Instance;
//		}

        if (backgroundImage && backgroundImage.texture == null)
        {
            backgroundImage.texture = manager ? manager.GetUsersLblTex() : null;
        }

        try
        {
            byte             error   = 0;
            NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out recChannelId, recBuffer, bufferSize, out dataSize, out error);

            switch (recData)
            {
            case NetworkEventType.Nothing:                     //1
                break;

            case NetworkEventType.ConnectEvent:                //2
                if (recHostId == serverHostId && recChannelId == serverChannelId &&
                    !dictConnection.ContainsKey(connectionId))
                {
                    HostConnection conn = new HostConnection();
                    conn.hostId       = recHostId;
                    conn.connectionId = connectionId;
                    conn.channelId    = recChannelId;
                    conn.keepAlive    = true;
                    //conn.matrixSent = false;

                    dictConnection[connectionId] = conn;
                    connListUpdated = true;
                }
                break;

            case NetworkEventType.DataEvent:                   //3
                if (recHostId == serverHostId && recChannelId == serverChannelId &&
                    dictConnection.ContainsKey(connectionId))
                {
                    HostConnection conn         = dictConnection[connectionId];
                    string         sRecvMessage = System.Text.Encoding.UTF8.GetString(recBuffer, 0, dataSize);

                    if (sRecvMessage == "ka")
                    {
                        conn.keepAlive = true;
                        dictConnection[connectionId] = conn;
                    }
                }
                break;

            case NetworkEventType.DisconnectEvent:             //4
                if (dictConnection.ContainsKey(connectionId))
                {
                    dictConnection.Remove(connectionId);
                    connListUpdated = true;
                }
                break;
            }

            if (connListUpdated)
            {
                // get all connection IDs
                alConnectionId.Clear();
                alConnectionId.AddRange(dictConnection.Keys);

                // display the number of connections
                StringBuilder sbConnStatus = new StringBuilder();
                sbConnStatus.AppendFormat("Server running: {0} connection(s)", dictConnection.Count);

                Debug.Log(sbConnStatus);

                if (statusText)
                {
                    statusText.text = sbConnStatus.ToString();
                }
            }

            // send body frame to available connections
            string sBodyFrame = manager ? manager.GetBodyFrameData(ref liRelTime, ref fCurrentTime) : string.Empty;

            if (sBodyFrame.Length > 0 && dictConnection.Count > 0)
            {
                StringBuilder sbSendMessage = new StringBuilder();

                sbSendMessage.Append(manager.GetWorldMatrixData()).Append('|');
                sbSendMessage.Append(sBodyFrame).Append('|');
                sbSendMessage.Append(manager.GetBodyHandData(ref liRelTime)).Append('|');

                if (sbSendMessage.Length > 0 && sbSendMessage[sbSendMessage.Length - 1] == '|')
                {
                    sbSendMessage.Remove(sbSendMessage.Length - 1, 1);
                }

                byte[] btSendMessage = System.Text.Encoding.UTF8.GetBytes(sbSendMessage.ToString());

                foreach (int connId in alConnectionId)
                {
                    HostConnection conn = dictConnection[connId];

                    if (conn.keepAlive)
                    {
                        conn.keepAlive         = false;
                        dictConnection[connId] = conn;

                        error = 0;
                        if (!NetworkTransport.Send(conn.hostId, conn.connectionId, conn.channelId, btSendMessage, btSendMessage.Length, out error))
                        {
                            Debug.LogError("Error sending packet via connection " + conn.connectionId + ": " + (NetworkError)error);
                        }
                    }
                }
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError(ex.Message + "\n" + ex.StackTrace);

            if (statusText)
            {
                statusText.text = ex.Message;
            }
        }
    }