private void AddBasicCmdToCurrentFrame(int cmd, int arg = 0) { FSPMessage msg = new FSPMessage(); msg.cmd = cmd; msg.args = new[] { arg }; AddCmdToCurrentFrame(0, msg); }
private void HandleGameExit(uint playerId, FSPMessage msg) { AddCmdToCurrentFrame(playerId, msg); FSPPlayer player = GetPlayer(playerId); if (player != null) { player.WaitForExit = true; onGameExit?.Invoke(player.ID); } }
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); }
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); } } }
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); }
/// <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); }
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); }
private void AddCmdToCurrentFrame(uint playerId, FSPMessage msg) { msg.playerId = playerId; m_LockedFrame.msgs.Add(msg); }
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; } } }
//--------------------------------------------------------- //收到客户端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); }