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)); } }
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()); }
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(); } } }