Exemplo n.º 1
0
        public override void TakeActionAffter(bool state)
        {
            MessageStructure ms = new MessageStructure();

            //ms.WriteByte(_message);
            ms.PushIntoStack(float.Parse(_x));
            ms.PushIntoStack(float.Parse(_y));
            ms.PushIntoStack(float.Parse(_z));
            ms.PushIntoStack(float.Parse(_qx));
            ms.PushIntoStack(float.Parse(_qy));
            ms.PushIntoStack(float.Parse(_qz));
            ms.PushIntoStack(float.Parse(_sx));
            ms.PushIntoStack(float.Parse(_sy));
            ms.PushIntoStack(float.Parse(_sz));
            ms.PushIntoStack(DateTime.Now);
            ms.WriteBuffer(new MessageHead(2007));

            byte[] buffer = ms.PopBuffer();

            var list = GameSession.GetOnlineAll(10 * 1000);

            list.ForEach(r =>
            {
                if (r.SessionId != Current.SessionId)
                {
                    r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
                    {
                        Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
                    });
                }
            });
            //Current.SendAsync(buffer,0,buffer.Length);

            base.TakeActionAffter(state);
        }
Exemplo n.º 2
0
        public override void TakeActionAffter(bool state)
        {
            var list = GameSession.GetOnlineAll(10 * 1000);

            //byte[] data = Encoding.UTF8.GetBytes(_message);

            MessageStructure ms = new MessageStructure();

            //ms.WriteByte(_message);
            ms.PushIntoStack(_message);
            ms.WriteBuffer(new MessageHead(2006));

            byte[] buffer = ms.PopBuffer();

            list.ForEach(r => {
                if (r.SessionId != Current.SessionId)
                {
                    r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
                    {
                        Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
                    });
                }
            });
            base.TakeActionAffter(state);
        }
Exemplo n.º 3
0
        private static byte[] DoSerialize(params BaseEntity[] entityList)
        {
            var rootWriter = new MessageStructure();

            rootWriter.PushIntoStack(entityList.Length);
            object fieldValue = null;

            foreach (var entity in entityList)
            {
                var schema = entity.GetSchema();
                if (schema == null)
                {
                    continue;
                }
                var recordWriter = new MessageStructure();
                recordWriter.PushIntoStack(schema.EntityName);
                //write columns
                var columns = schema.GetColumns();
                foreach (var column in columns)
                {
                    fieldValue = entity.GetPropertyValue(column.Name);
                    if (EntitySchemaSet.IsSupportType(column.ColumnType))
                    {
                        recordWriter.PushIntoStack(column.ColumnType, fieldValue);
                    }
                    else if (column.HasChild)
                    {
                        PushChildStack(recordWriter, column, fieldValue);
                    }
                }

                rootWriter.PushIntoStack(recordWriter);
            }

            var head = new MessageHead(SyncActionId);

            rootWriter.WriteBuffer(head);
            return(rootWriter.PopBuffer());
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="response"></param>
        /// <param name="actionGetter"></param>
        /// <param name="errorCode"></param>
        /// <param name="errorInfo"></param>
        public virtual void ResponseError(BaseGameResponse response, ActionGetter actionGetter, int errorCode, string errorInfo)
        {
            string           st    = actionGetter.GetSt();
            ProtocolVersion  prtcl = actionGetter.GetPtcl();
            MessageHead      head  = new MessageHead(actionGetter.GetMsgId(), actionGetter.GetActionId(), st, errorCode, errorInfo);
            MessageStructure sb    = new MessageStructure();

            if (prtcl >= ProtocolVersion.ExtendHead)
            {
                sb.PushIntoStack(0); //不输出扩展头属性
            }
            sb.WriteBuffer(head);
            response.BinaryWrite(sb.PopBuffer());
        }
Exemplo n.º 5
0
        public override void TakeActionAffter(bool state)
        {
            //ms.WriteByte(_message);

            var cUser = (GameUser)Current.User;



            MessageStructure ms = new MessageStructure();

            //ms.PushIntoStack();
            ms.PushIntoStack(true);

            ms.WriteBuffer(new MessageHead(2010));

            byte[] buffer = ms.PopBuffer();

            //Current.SendAsync(buffer, 0, buffer.Length);

            var rUser = GameSession.GetOnlineAll(10 * 1000).FirstOrDefault(r => r.UserId == cUser.RivalId);

            //list.ForEach(r =>
            //{
            //    if (r.SessionId != Current.SessionId)
            //    r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
            //    {
            //        Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
            //    });
            //});

            if (rUser != null)
            {
                rUser.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
                {
                    Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
                });
            }

            if (cUser != null)
            {
                cUser.ModifyLocked(() =>
                {
                    cUser.RoomId    = string.Empty;
                    cUser.Searching = false;
                    cUser.RivalId   = -1;
                });
            }

            base.TakeActionAffter(state);
        }
Exemplo n.º 6
0
        protected override void OnDisconnected(GameSession session)
        {
            Console.WriteLine("客户端UserId:[{0}]已与服务器断开", session.UserId);

            var cUser = (GameUser)session.User;

            if (cUser != null)
            {
                MessageStructure ms = new MessageStructure();
                //ms.PushIntoStack();
                ms.PushIntoStack(true);

                ms.WriteBuffer(new MessageHead(2010));

                byte[] buffer = ms.PopBuffer();

                //Current.SendAsync(buffer, 0, buffer.Length);

                Console.WriteLine("客户端RivalId:[{0}]将会收到离开消息", cUser.RivalId);


                var rUser = GameSession.GetOnlineAll(10 * 1000).Find(r => r.UserId == cUser.RivalId);



                if (rUser != null)
                {
                    rUser.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
                    {
                        Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
                    });
                }
                else
                {
                    Console.WriteLine("客户端RivalUser为空");
                }
            }
            else
            {
                Console.WriteLine("客户端GameUser为空");
            }

            base.OnDisconnected(session);
        }
Exemplo n.º 7
0
 private static void PushChildStack(MessageStructure parent, SchemaColumn parentColumn, object value)
 {
     if (parentColumn.IsDictionary)
     {
         var     column = parentColumn.Children[1];
         dynamic dict   = value;
         dynamic keys   = dict.Keys;
         int     count  = dict.Count;
         parent.PushIntoStack(count);
         foreach (var key in keys)
         {
             object item       = dict[key];
             var    itemWriter = new MessageStructure();
             itemWriter.PushIntoStack(key);
             if (EntitySchemaSet.IsSupportType(column.ColumnType))
             {
                 itemWriter.PushIntoStack(column.ColumnType, item);
             }
             else if (column.HasChild)
             {
                 PushChildStack(itemWriter, column, item);
             }
             parent.PushIntoStack(itemWriter);
         }
     }
     else if (parentColumn.IsList)
     {
         var     column = parentColumn.Children[0];
         dynamic list   = value;
         int     count  = list.Count;
         parent.PushIntoStack(count);
         foreach (var item in list)
         {
             var itemWriter = new MessageStructure();
             if (EntitySchemaSet.IsSupportType(column.ColumnType))
             {
                 itemWriter.PushIntoStack(column.ColumnType, item);
             }
             else if (column.HasChild)
             {
                 PushChildStack(itemWriter, column, item);
             }
             parent.PushIntoStack(itemWriter);
         }
     }
     else
     {
         //child entity object
         parent.PushIntoStack(1);
         var typeAccessor = ObjectAccessor.Create(value, true);
         var itemWriter   = new MessageStructure();
         foreach (var column in parentColumn.Children)
         {
             try
             {
                 var fieldValue = typeAccessor[column.Name];
                 if (EntitySchemaSet.IsSupportType(column.ColumnType))
                 {
                     itemWriter.PushIntoStack(column.ColumnType, fieldValue);
                 }
                 else if (column.HasChild)
                 {
                     PushChildStack(itemWriter, column, fieldValue);
                 }
             }
             catch
             {
             }
         }
         parent.PushIntoStack(itemWriter);
     }
 }
Exemplo n.º 8
0
        public override void TakeActionAffter(bool state)
        {
            GameSession gameSession = null;

            GameSession.GetOnlineAll(10 * 1000).ForEach(r =>
            {
                var user = (GameUser)r.User;
                if (r.UserId != Current.UserId && user.Searching)
                {
                    gameSession = r;
                    return;
                }
            });

            if (gameSession != null)
            {
                MessageStructure ms = new MessageStructure();
                //ms.PushIntoStack();
                ms.PushIntoStack(true);

                ms.WriteBuffer(new MessageHead(2009));

                byte[] buffer = ms.PopBuffer();


                Current.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
                {
                    Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
                });

                gameSession.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
                {
                    Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
                });

                var cUser = (GameUser)Current.User;
                var vUser = (GameUser)gameSession.User;

                cUser.ModifyLocked(() => {
                    cUser.Searching = false;
                    cUser.RivalId   = vUser.UserId;
                });
                vUser.ModifyLocked(() =>
                {
                    vUser.Searching = false;
                    vUser.RivalId   = cUser.UserId;
                });
            }

            //ms.WriteByte(_message);
            //var cache = new PersonalCacheStruct<GameUser>();

            //var persons= cache.FindGlobal(r=>r.Searching==true);//.Where(r => r.Searching == true);

            //bool start = false;

            //if (persons.Count()>1)
            //{
            //    start = true;
            //}

            //MessageStructure ms = new MessageStructure();
            ////ms.PushIntoStack();
            //ms.PushIntoStack(start);

            //ms.WriteBuffer(new MessageHead(2009));

            //byte[] buffer = ms.PopBuffer();

            ////Current.SendAsync(buffer, 0, buffer.Length);

            //var list = GameSession.GetOnlineAll(10 * 1000);

            //if (start)
            //{
            //    list.ForEach(r =>
            //    {
            //        //if (r.SessionId != Current.SessionId)
            //        r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult =>
            //        {
            //            Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail");
            //        });
            //    });
            //    foreach (var p in persons)
            //    {
            //        p.ModifyLocked(() =>
            //        {
            //            //_user.RoomId = Guid.NewGuid().ToString();
            //            _user.Searching = false;
            //        });
            //    }
            //}

            base.TakeActionAffter(state);
        }