コード例 #1
0
        //---------------------------------------------------------------------------------------------
        internal void HandleRoomStoryMessage(Msg_LRL_StoryMessage msg)
        {
            string    msgId = string.Format("server:{0}", msg.MsgId);
            ArrayList args  = new ArrayList();

            args.Add(msg.UserGuid);
            for (int i = 0; i < msg.Args.Count; i++)
            {
                switch (msg.Args[i].val_type)
                {
                case Msg_LRL_StoryMessage.ArgType.NULL:    //null
                    args.Add(null);
                    break;

                case Msg_LRL_StoryMessage.ArgType.INT:    //int
                    args.Add(int.Parse(msg.Args[i].str_val));
                    break;

                case Msg_LRL_StoryMessage.ArgType.FLOAT:    //float
                    args.Add(float.Parse(msg.Args[i].str_val));
                    break;

                default:    //string
                    args.Add(msg.Args[i].str_val);
                    break;
                }
            }
            object[] objArgs = args.ToArray();
            SendStoryMessage(msgId, objArgs);
        }
コード例 #2
0
        protected override bool ExecCommand(StoryInstance instance, StoryMessageHandler handler, long delta)
        {
            UserThread userThread = instance.Context as UserThread;

            if (null != userThread)
            {
                string _msg = m_Msg.Value;

                Msg_LRL_StoryMessage msg = new Msg_LRL_StoryMessage();
                msg.MsgId = _msg;

                for (int i = 0; i < m_Args.Count; ++i)
                {
                    IStoryValue val = m_Args[i];
                    object      v   = val.Value;
                    if (null == v)
                    {
                        Msg_LRL_StoryMessage.MessageArg arg = new Msg_LRL_StoryMessage.MessageArg();
                        arg.val_type = Msg_LRL_StoryMessage.ArgType.NULL;
                        arg.str_val  = "";
                        msg.Args.Add(arg);
                    }
                    else if (v is int)
                    {
                        Msg_LRL_StoryMessage.MessageArg arg = new Msg_LRL_StoryMessage.MessageArg();
                        arg.val_type = Msg_LRL_StoryMessage.ArgType.INT;
                        arg.str_val  = ((int)v).ToString();
                        msg.Args.Add(arg);
                    }
                    else if (v is float)
                    {
                        Msg_LRL_StoryMessage.MessageArg arg = new Msg_LRL_StoryMessage.MessageArg();
                        arg.val_type = Msg_LRL_StoryMessage.ArgType.FLOAT;
                        arg.str_val  = ((float)v).ToString();
                        msg.Args.Add(arg);
                    }
                    else
                    {
                        Msg_LRL_StoryMessage.MessageArg arg = new Msg_LRL_StoryMessage.MessageArg();
                        arg.val_type = Msg_LRL_StoryMessage.ArgType.STRING;
                        arg.str_val  = v.ToString();
                        msg.Args.Add(arg);
                    }
                }
                if (m_HaveUserGuid)
                {
                    ulong userGuid = m_UserGuid.Value;
                    msg.UserGuid = userGuid;
                    userThread.SendServerMessage(msg);
                }
                else
                {
                    userThread.SendServerMessage(msg);
                }
            }
            return(false);
        }
コード例 #3
0
        private void HandleStoryMessageFromRoom(Msg_LRL_StoryMessage msg, PBChannel channel, int src, uint session)
        {
            UserInfo user = m_UserProcessScheduler.GetUserInfo(msg.UserGuid);

            if (null != user)
            {
                ForwardToWorld(user.UserSvrName, msg);
            }
        }
コード例 #4
0
        private void HandleRoomStoryMessage(Msg_LRL_StoryMessage msg_, PBChannel channel, int src, uint session)
        {
            UserProcessScheduler dataProcess = UserServer.Instance.UserProcessScheduler;
            UserThread           userThread  = dataProcess.GetUserThread(msg_.UserGuid);

            if (null != userThread)
            {
                userThread.QueueAction(userThread.HandleRoomStoryMessage, msg_);
            }
            else
            {
                dataProcess.DefaultUserThread.QueueAction(dataProcess.DefaultUserThread.HandleRoomStoryMessage, msg_);
            }
        }
コード例 #5
0
        internal void HandleRoomStoryMessage(Msg_LRL_StoryMessage msg_)
        {
            UserProcessScheduler dataProcess = LobbyServer.Instance.UserProcessScheduler;
            UserInfo             user        = dataProcess.GetUserInfo(msg_.UserGuid);

            if (null != user)
            {
                RoomInfo info = m_LobbyInfo.GetRoomByID(user.CurrentRoomID);
                if (null != info)
                {
                    msg_.RoomId = user.CurrentRoomID;
                    LobbyServer.Instance.RoomSvrChannel.Send(info.RoomServerName, msg_);
                }
            }
        }
コード例 #6
0
        internal void HandleRoomStoryMessage(Msg_LRL_StoryMessage msg, PBChannel channel)
        {
            Room room = GetRoomByID(msg.RoomId);

            if (null != room)
            {
                User  user     = room.GetUserByGuid(msg.UserGuid);
                Scene curScene = room.ActiveScene;
                if (null != user && null != curScene)
                {
                    try {
                        string    msgId = string.Format("server:{0}", msg.MsgId);
                        ArrayList args  = new ArrayList();
                        args.Add(user.RoleId);
                        for (int i = 0; i < msg.Args.Count; i++)
                        {
                            switch (msg.Args[i].val_type)
                            {
                            case Msg_LRL_StoryMessage.ArgType.NULL:    //null
                                args.Add(null);
                                break;

                            case Msg_LRL_StoryMessage.ArgType.INT:    //int
                                args.Add(int.Parse(msg.Args[i].str_val));
                                break;

                            case Msg_LRL_StoryMessage.ArgType.FLOAT:    //float
                                args.Add(float.Parse(msg.Args[i].str_val));
                                break;

                            default:    //string
                                args.Add(msg.Args[i].str_val);
                                break;
                            }
                        }
                        object[] objArgs = args.ToArray();
                        curScene.StorySystem.SendMessage(msgId, objArgs);
                    } catch (Exception ex) {
                        LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_StoryMessage throw exception:{0}\n{1}", ex.Message, ex.StackTrace);
                    }
                }
            }
        }
コード例 #7
0
        private void HandleRoomStoryMessage(Msg_LRL_StoryMessage msg, PBChannel channel, int handle, uint seq)
        {
            bool isFieldRoom;
            int  ix = GetActiveRoomThreadIndex(msg.RoomId, out isFieldRoom);

            if (ix >= 0)
            {
                if (isFieldRoom)
                {
                    RoomThread roomThread = field_roomthread_list_[ix];
                    roomThread.QueueAction(roomThread.HandleRoomStoryMessage, msg, channel);
                }
                else
                {
                    RoomThread roomThread = roomthread_list_[ix];
                    roomThread.QueueAction(roomThread.HandleRoomStoryMessage, msg, channel);
                }
            }
        }
コード例 #8
0
 private void HandleStoryMessageFromUserServer(Msg_LRL_StoryMessage msg_, PBChannel channel, int src, uint session)
 {
     m_RoomProcessThread.QueueAction(m_RoomProcessThread.HandleRoomStoryMessage, msg_);
 }