예제 #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));
     }
 }
예제 #2
0
 public static void AppendCloseByUsers(StringBuilder sb, Dictionary <string, TransFormHolder> tList, SlmControls.Vector3 userPos, double mindistance, double maxdistance, ref int counter)
 {
     foreach (var i in tList)
     {
         string pos = i.Value.Position;
         SlmControls.Vector3 posv = SlmControls.Vector3.FromString(pos);
         if (posv != null)
         {
             var dist = SlmControls.Vector3.Distance(posv, userPos);
             if (dist >= mindistance && dist < maxdistance)
             {
                 AppendUser(sb, i.Key, i.Value);
                 counter++;
                 if (counter > maxUsers)
                 {
                     return;
                 }
             }
         }
     }
 }
예제 #3
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());
        }