Пример #1
0
        private void AddBasicCmdToCurrentFrame(int cmd, int arg = 0)
        {
            FSPMessage msg = new FSPMessage();

            msg.cmd  = cmd;
            msg.args = new[] { arg };
            AddCmdToCurrentFrame(0, msg);
        }
Пример #2
0
        private void HandleGameExit(uint playerId, FSPMessage msg)
        {
            AddCmdToCurrentFrame(playerId, msg);
            FSPPlayer player = GetPlayer(playerId);

            if (player != null)
            {
                player.WaitForExit = true;
                onGameExit?.Invoke(player.ID);
            }
        }
Пример #3
0
 public bool SendFSP(int clientFrameID, int cmd, int[] args)
 {
     if (isRunning)
     {
         FSPMessage msg = tempSendData.msg;
         msg.cmd           = cmd;
         msg.clientFrameID = clientFrameID;
         msg.args          = args;
         int length = ProtoBuffUtility.Serialize(tempSendData, sendBufferTemp);
         kcp.Send(sendBufferTemp, length);
         return(length > 0);
     }
     return(false);
 }
Пример #4
0
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            FSPMessage msg = value as FSPMessage;

            if (msg == null)
            {
                return(null);
            }

            if (msg.from == dataM.Myself)
            {
                if (parameter?.ToString() == "top")
                {
                    return(topColorMy);
                }
                else if (parameter?.ToString() == "bottom")
                {
                    return(bottomColorMy);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                int index = dataM.MessagesToDisplay.Select(m => m.from)
                            .Distinct()
                            .Where(f => f != dataM.Myself)
                            .TakeWhile(x => x != msg.from).Count() % topColors.Count();

                if (parameter?.ToString() == "top")
                {
                    return(topColors[index]);
                }
                else if (parameter?.ToString() == "bottom")
                {
                    return(bottomColors[index]);
                }
                else
                {
                    return(null);
                }
            }
        }
Пример #5
0
        private void SendFSPLocal(int cmd, params int[] args)
        {
            if (nextLocalFrameData == null || nextLocalFrameData.frameID != clientCurrentFrameIndex + 1)
            {
                nextLocalFrameData = new FSPFrameData {
                    frameID = clientCurrentFrameIndex + 1
                };
                frameDatas.Add(nextLocalFrameData.frameID, nextLocalFrameData);
            }
            FSPMessage msg = new FSPMessage
            {
                cmd      = cmd,
                args     = args,
                playerID = PlayerId
            };

            nextLocalFrameData.msgs.Add(msg);
        }
Пример #6
0
        /// <summary>
        /// 用于本地兼容,比如打PVE的时候,也可以用帧同步兼容
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="arg"></param>
        private void SendFSPLocal(int cmd, int[] args)
        {
            Debuger.Log("vkey={0}, arg={1}", cmd, args.ToListString());

            if (m_NextLocalFrame == null || m_NextLocalFrame.frameId != m_CurrentFrameIndex + 1)
            {
                m_NextLocalFrame         = new FSPFrame();
                m_NextLocalFrame.frameId = m_CurrentFrameIndex + 1;

                m_FrameBuffer.Add(m_NextLocalFrame.frameId, m_NextLocalFrame);
            }

            FSPMessage msg = new FSPMessage();

            msg.cmd      = cmd;
            msg.args     = args;
            msg.playerId = m_MinePlayerId;
            m_NextLocalFrame.msgs.Add(msg);
        }
Пример #7
0
        public bool SendFSP(int clientFrameId, int cmd, int[] args)
        {
            Debuger.Log("clientFrameId:{0}, cmd:{1}, args:{2}", clientFrameId, cmd, args.ToListString());

            if (m_IsRunning)
            {
                FSPMessage msg = m_TempSendData.msgs[0];
                msg.cmd           = cmd;
                msg.clientFrameId = clientFrameId;
                msg.args          = args;

                m_TempSendData.msgs.Clear();
                m_TempSendData.msgs.Add(msg);


                int len = PBSerializer.NSerialize(m_TempSendData, m_SendBufferTemp);
                m_Kcp.Send(m_SendBufferTemp, len);
                return(len > 0);
            }

            return(false);
        }
Пример #8
0
 private void AddCmdToCurrentFrame(uint playerId, FSPMessage msg)
 {
     msg.playerId = playerId;
     m_LockedFrame.msgs.Add(msg);
 }
Пример #9
0
        protected virtual void HandleClientCmd(FSPPlayer player, FSPMessage msg)
        {
            uint playerId = player.id;

            //处理鉴权
            if (!player.HasAuthed)
            {
                if (msg.cmd == FSPBasicCmd.AUTH)
                {
                    player.SetAuth(msg.args[0]);
                }
                else
                {
                    Debuger.LogWarning("当前Player未鉴权,无法处理该Cmd:{0}", msg.cmd);
                }
                return;
            }

            switch (msg.cmd)
            {
            case FSPBasicCmd.GAME_BEGIN:
            {
                Debuger.Log("GAME_BEGIN, playerId = {0}, cmd = {1}", playerId, msg);
                SetFlag(playerId, ref m_GameBeginFlag, "m_GameBeginFlag");
                break;
            }

            case FSPBasicCmd.ROUND_BEGIN:
            {
                Debuger.Log("ROUND_BEGIN, playerId = {0}, cmd = {1}", playerId, msg);
                SetFlag(playerId, ref m_RoundBeginFlag, "m_RoundBeginFlag");
                break;
            }

            case FSPBasicCmd.CONTROL_START:
            {
                Debuger.Log("CONTROL_START, playerId = {0}, cmd = {1}", playerId, msg);
                SetFlag(playerId, ref m_ControlStartFlag, "m_ControlStartFlag");
                break;
            }

            case FSPBasicCmd.ROUND_END:
            {
                Debuger.Log("ROUND_END, playerId = {0}, cmd = {1}", playerId, msg);
                SetFlag(playerId, ref m_RoundEndFlag, "m_RoundEndFlag");
                break;
            }

            case FSPBasicCmd.GAME_END:
            {
                Debuger.Log("GAME_END, playerId = {0}, cmd = {1}", playerId, msg);
                SetFlag(playerId, ref m_GameEndFlag, "m_GameEndFlag");
                break;
            }

            case FSPBasicCmd.GAME_EXIT:
            {
                Debuger.Log("GAME_EXIT, playerId = {0}, cmd = {1}", playerId, msg);
                HandleGameExit(playerId, msg);
                break;
            }

            default:
            {
                Debuger.Log("playerId = {0}, cmd = {1}", playerId, msg);
                AddCmdToCurrentFrame(playerId, msg);
                break;
            }
            }
        }
Пример #10
0
 //---------------------------------------------------------
 //收到客户端Player的Cmd
 private void OnRecvFromPlayer(FSPPlayer player, FSPMessage msg)
 {
     HandleClientCmd(player, msg);
 }
        //public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        //{
        //    FSPMessage msg = value as FSPMessage;

        //    if (msg == null)
        //        return null;

        //    if (parameter.ToString() == "name")
        //    {
        //        if (msg.from == dataM.Myself)
        //        {
        //            return "Me";
        //        }
        //        else
        //        {
        //            return !string.IsNullOrEmpty(msg.displayName) ? msg.displayName : msg.from ?? "";
        //        }
        //    }
        //    else if (parameter.ToString() == "time")
        //    {
        //        return msg.originalarrivaltime?.ToString("yyyy-MM-dd HH:mm:ss");
        //    }
        //    else if (parameter.ToString() == "content")
        //    {
        //        return msg.content;
        //    }
        //    else
        //    {
        //        return null;
        //    }
        //}

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            FSPMessage msg = value as FSPMessage;

            if (msg == null)
            {
                return(null);
            }

            string textToDisplay = null;

            if (parameter.ToString() == "name")
            {
                if (msg.from == dataM.Myself)
                {
                    textToDisplay = "Me";
                }
                else
                {
                    textToDisplay = !string.IsNullOrEmpty(msg.displayName) ? msg.displayName : msg.from ?? "";
                }
            }
            else if (parameter.ToString() == "time")
            {
                textToDisplay = msg.originalarrivaltime?.ToString("yyyy-MM-dd HH:mm:ss");
            }
            else if (parameter.ToString() == "content")
            {
                textToDisplay = msg.content;
            }
            else
            {
                textToDisplay = null;
            }

            if (textToDisplay != null)
            {
                var textBlock = new TextBlock();
                textBlock.TextWrapping = TextWrapping.Wrap;
                textBlock.Padding      = new Thickness(2);

                if (string.IsNullOrWhiteSpace(dataM.SearchString))
                {
                    textBlock.Text = textToDisplay;
                }
                else
                {
                    var parts = SplitAndKeep(textToDisplay, dataM.SearchString);

                    // https://stackoverflow.com/questions/3728584/how-to-display-search-results-in-a-wpf-items-control-with-highlighted-query-terms

                    foreach (var part in parts)
                    {
                        if (0 == string.Compare(part, dataM.SearchString, true))
                        {
                            textBlock.Inlines.Add(new Run(part)
                            {
                                FontWeight = FontWeights.Bold,
                                Background = Brushes.Yellow
                            });
                        }
                        else
                        {
                            textBlock.Inlines.Add(new Run(part));
                        }
                    }
                }

                return(textBlock);
            }

            return(null);
        }