Ejemplo n.º 1
0
 public static string UpdateTransFormHolder(string roomKey, string userGuid, TransFormHolder transformHolder, SceneAction action, string userPosStr, PostI post, int Timezone_Offset, List <ServerObjectTransform> sot)
 {
     lock (thisLock)
     {
         Dictionary <string, TransFormHolder> tList = null;
         if (!TransFormDict.TryGetValue(roomKey, out tList))
         {
             tList = new Dictionary <string, TransFormHolder>();
         }
         foreach (var item in tList.Where(kvp => kvp.Value.TimeStamp < DateTime.Now.AddSeconds(-4)).ToList())
         {
             tList.Remove(item.Key);
         }
         //check idlecount
         if (tList.ContainsKey(userGuid))
         {
             var lastTransform = tList[userGuid];
             if (lastTransform != null && lastTransform.Rotation == transformHolder.Rotation)
             {
                 transformHolder.IdleCount = lastTransform.IdleCount + 1;
             }
         }
         tList[userGuid]        = transformHolder;
         TransFormDict[roomKey] = tList;
         ActionHolder ah = null;
         ah = UpdateActionsHolder(roomKey, userGuid, action);
         List <ServerObjectTransform> sotRes  = HandleServerObjects(roomKey, userGuid, sot);
         SlmControls.Vector3          userPos = SlmControls.Vector3.FromString(userPosStr);
         return(MakeXml(tList, ah, userPos, post, Timezone_Offset, sotRes));
     }
 }
Ejemplo n.º 2
0
        public static string MakeXml(Dictionary <string, TransFormHolder> tList, ActionHolder actionHolder, SlmControls.Vector3 userPos, PostI post, int Timezone_Offset, List <ServerObjectTransform> sotRes)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("<?xml version='1.0' encoding='utf-8'?>");
            sb.Append("<ro>");
            int counter = 0;

            if (tList != null)
            {
                if (tList.Count <= maxUsers || userPos == null)
                {
                    foreach (var i in tList)
                    {
                        AppendUser(sb, i.Key, i.Value);
                        if (counter > maxUsers)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    AppendCloseByUsers(sb, tList, userPos, 0, 2, ref counter);
                    if (counter < maxUsers)
                    {
                        AppendCloseByUsers(sb, tList, userPos, 2, 4, ref counter);
                    }
                    if (counter < maxUsers)
                    {
                        AppendCloseByUsers(sb, tList, userPos, 4, 10, ref counter);
                    }
                }
                if (actionHolder != null && actionHolder.Actions.Count > 0)
                {
                    sb.Append("<ah>");
                    foreach (var act in actionHolder.Actions)
                    {
                        sb.Append("<ac>");
                        sb.Append("<n>");
                        sb.Append(act.GoName);
                        sb.Append("</n>");
                        sb.Append("<t>");
                        sb.Append(act.SceneTime.ToString());
                        sb.Append("</t>");
                        sb.Append("</ac>");
                    }
                    sb.Append("</ah>");
                }
                if (post != null)
                {
                    sb.Append("<p>");
                    sb.Append("<dt>");
                    sb.Append(((DateTime)post.CreationDate).AddHours(Timezone_Offset));//.ToString("yyyy-mm-dd HH:mm")
                    sb.Append("</dt>");
                    sb.Append("<t>");
                    sb.Append(post.Text);
                    sb.Append("</t>");
                    sb.Append("<n>");
                    sb.Append(post.NickName);
                    sb.Append("</n>");
                    sb.Append("<g>");
                    sb.Append(post.Guid);
                    sb.Append("</g>");
                    sb.Append("</p>");
                }
                if (sotRes != null)
                {
                    sb.Append("<sol>");
                    foreach (var t in sotRes)
                    {
                        if (!string.IsNullOrWhiteSpace(t.Guid))
                        {
                            sb.Append("<so>");
                            sb.Append("<ug>");
                            sb.Append(t.UserGuid);
                            sb.Append("</ug>");
                            sb.Append("<g>");
                            sb.Append(t.Guid);
                            sb.Append("</g>");
                            sb.Append("<p>");
                            if (t.Position != null)
                            {
                                sb.Append(t.Position.ToString());
                            }
                            sb.Append("</p>");
                            sb.Append("<r>");
                            if (t.Rotation != null)
                            {
                                sb.Append(t.Rotation.ToString());
                            }
                            sb.Append("</r>");
                            sb.Append("<v>");
                            if (t.Velocity != null)
                            {
                                sb.Append(t.Velocity.ToString());
                            }
                            sb.Append("</v>");
                            sb.Append("<av>");
                            if (t.Velocity != null)
                            {
                                sb.Append(t.AngularVelocity.ToString());
                            }
                            sb.Append("</av>");
                            sb.Append("</so>");
                        }
                    }

                    sb.Append("</sol>");
                }
            }
            //if (kbText != null)
            //{
            //    sb.Append("<kb>");
            //    sb.Append(kbText);
            //    sb.Append("</kb>");

            //}
            sb.Append("</ro>");
            return(sb.ToString());
        }
Ejemplo n.º 3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            ReadRequestHeaders();
            string userData           = Request["u"];   //User- and avatar data
            string text               = Request["ci"];  //New text posted on community board
            string lastMessageGuid    = Request["lmg"]; //The guid from the last community message that was returned to the user
            string communityBoardPage = Request["p"];   //Current page for the community board
            string leftHandPosition   = Request["lhp"]; //position for the left hand controller
            string leftHandRotation   = Request["lhr"]; //rotation for the left hand controller
            string rightHandPosition  = Request["rhp"]; //position for the right hand controller
            string rightHandRotation  = Request["rhr"]; //rotation for the right hand controller

            string postData = new System.IO.StreamReader(Request.InputStream).ReadToEnd();
            List <SlamSiteBase.ServerObjectTransform> sot = null;

            if (userData != null)
            {
                if (!string.IsNullOrWhiteSpace(postData)) //Handling exchange of game object transformations
                {
                    var tp   = Server.UrlDecode(postData);
                    var tsot = Newtonsoft.Json.JsonConvert.DeserializeObject <List <SlamSiteBase.ServerObjectTransform> >(tp);
                    if (tsot.Count > 0)
                    {
                        sot = tsot;
                    }
                }
                string[] uS = userData.Split(Convert.ToChar("|"));
                if (uS.Length > 3)
                {
                    string room     = uS[0];
                    string userGuid = uS[1];
                    string pos      = uS[2];
                    string rot      = uS[3];
                    SlamSiteBase.SceneAction     action          = null;
                    SlamSiteBase.TransFormHolder transformHolder = new SlamSiteBase.TransFormHolder();
                    if (uS.Length > 4)
                    {
                        transformHolder.NickName = uS[4].Trim();
                    }
                    if (uS.Length > 5)
                    {
                        transformHolder.AvatarNo = uS[5].Trim();
                    }
                    if (uS.Length > 6)
                    {
                        transformHolder.DissonanceGuid = uS[6].Trim();
                    }
                    if (uS.Length > 7)
                    {
                        string actionName = uS[7].Trim();
                        string sceneTimeS = uS[8].Trim();
                        float  sceneTime  = 0;
                        if (float.TryParse(sceneTimeS, out sceneTime) && !string.IsNullOrEmpty(actionName))
                        {
                            action           = new SlamSiteBase.SceneAction();
                            action.GoName    = actionName;
                            action.SceneTime = sceneTime;
                        }
                    }
                    transformHolder.Position   = pos;
                    transformHolder.Rotation   = rot;
                    transformHolder.LHPosition = leftHandPosition;
                    transformHolder.LHRotation = leftHandRotation;
                    transformHolder.RHPosition = rightHandPosition;
                    transformHolder.RHRotation = rightHandRotation;
                    transformHolder.TimeStamp  = DateTime.Now;
                    int   pageNo = 0;
                    PostI post   = null;
                    if (communityBoardPage != null)
                    {
                        int.TryParse(communityBoardPage.ToString(), out pageNo);
                        post = UpdateCommunityInfo(room, text, transformHolder.NickName, lastMessageGuid, pageNo);
                    }
                    Response.Clear();
                    Response.ContentType = "text/xml";
                    Response.Write(GlobalBase.UpdateTransFormHolder(room, userGuid, transformHolder, action, pos, post, Timezone_Offset, sot));
                    Response.End();
                }
            }
        }