private void btnLuaRunPath_Click(object sender, EventArgs e) { try { string host = txtHost.Text; int port = txtPort.Text.ToInt(); int actionId = txtAction.Text.ToInt(); string pwd = txtPwd.Text.Trim(); _token.GameType = txtGameType.Text.ToInt(); _token.ServerID = txtServerID.Text.ToInt(); _token.RetailID = txtRetailID.Text.Trim(); _token.Pid = txtPid.Text.Trim(); _token.Pwd = EncodePwdAndUrlEncode(pwd); SetConfig(host, port, actionId, _token, pwd); string funName = string.Format("Action{0}", actionId); ScutWriter.getInstance().writeHead(_token.Sid, _token.Uid.ToInt()); ScutWriter.getInstance().writeInt32("ActionId", actionId); if (!LuaRuntime.GetContext().TryCall <Action <UserToken> >(funName, _token)) { _responseLog.WriteFormatLine("请求出错:The {0} function is not exist in lua file.", funName); } var sendData = ScutWriter.generatePostData(); TcpRequest.Instance().Send(host, port, sendData, null); ScutWriter.resetData(); } catch (Exception ex) { _responseLog.WriteFormatLine("请求出错:{0}", ex); } finally { ResponseReflesh(); } }
public void HandleRequest(TcpRequest request) { _logger.LogMessage($"Handling Request: {request.RequestType}"); switch (request.RequestType) { case AoTcpRequest.GetButtonInfo: HandleGetButtonInfo(request); break; case AoTcpRequest.GetButtonImage: HandleGetButtonImage(request); break; case AoTcpRequest.RegisterForUpdates: HandleRegisterForUpdates(request); break; case AoTcpRequest.StatValue: HandleRequestStatValue(request); break; case AoTcpRequest.ChangeStatValue: HandleChangeStatValue(request); break; case AoTcpRequest.EventBus: HandleEventBusRequest(request); break; } }
private void HandleGetButtonImage(TcpRequest request) { _logger.LogMessage("Handling button image request"); var buttonImageRequest = JsonConvert.DeserializeObject <ButtonImageRequest>(request.Body); var cardGroup = _appData.Game.GetCardGroup(buttonImageRequest.CardGroupId); byte[] imageAsBytes = null; var imageId = string.Empty; if (!buttonImageRequest.ButtonMode.HasValue || !buttonImageRequest.Index.HasValue) { SendButtonImageResponse(request.Socket, cardGroup.Name, cardGroup.ButtonImageAsBytes); return; } else { if (cardGroup.GetButton(buttonImageRequest.ButtonMode.Value, buttonImageRequest.ZoneIndex.Value, buttonImageRequest.Index.Value) is CardInfoButton cardButton) { imageId = cardButton.CardInfo.ImageId; imageAsBytes = cardButton.CardInfo.ButtonImageAsBytes; } } SendButtonImageResponse(request.Socket, imageId, imageAsBytes); }
private void HandleRegisterForUpdates(TcpRequest request) { _logger.LogMessage("Handling register for update request"); var registerForUpdatesRequest = JsonConvert.DeserializeObject <RegisterForUpdatesRequest>(request.Body); _broadcastService.AddPort(registerForUpdatesRequest.Port); SendAllStats(); var cardGroupInfoList = new List <CardGroupInfo>(); var buttonInfoList = new List <ButtonInfo>(); foreach (var cardGroup in _appData.Game.AllCardGroups) { cardGroupInfoList.Add(new CardGroupInfo { CardGroupId = cardGroup.Id, Name = cardGroup.Name, IsImageAvailable = cardGroup.ButtonImageAsBytes != null, ImageId = cardGroup.Name, Zones = (from zone in cardGroup.CardZones select zone.Name).ToList() }); buttonInfoList.AddRange(cardGroup.GetButtonInfo()); } SendRegisterForUpdatesResponse(request.Socket, cardGroupInfoList, buttonInfoList); }
private void HandleGetButtonInfo(TcpRequest request) { _logger.LogMessage("Handling button info request"); var getCardInfoRequest = JsonConvert.DeserializeObject <GetCardInfoRequest>(request.Body); var cardButton = GetCardButton(getCardInfoRequest); SendCardInfoResponse(request.Socket, cardButton); }
private void HandleEventBusRequest(TcpRequest request) { Send(request.Socket, new OkResponse().ToString()); var eventBusRequest = JsonConvert.DeserializeObject <EventBusRequest>(request.Body); _crossAppEventBus.ReceiveMessage(eventBusRequest); }
protected override async Task Handle(TcpRequest <ServerStatus> request, CancellationToken cancellationToken) { var msg = request.Message; var serverId = new PolychatServerIdString(msg.ServerId); var sanitisedId = serverId.ToSanitisedUppercase(); var server = _polychatService.GetOnlineServerOrDefault(sanitisedId); if (server is not null) { await _polychatService.ForwardMessage(sanitisedId, msg); if ( msg.Status is ServerStatus.Types.ServerStatusEnum.Stopped or ServerStatus.Types.ServerStatusEnum.Crashed ) { _polychatService.RemoveOnlineServer(sanitisedId); _logger.LogInformation("Removed server {id} from the list of online servers.", sanitisedId); request.ConnectedClient.StopListening(); } var getChatChannelResult = await _channelApi.GetChannelAsync(new(_polychatSettings.ChatChannelId), cancellationToken); if (!getChatChannelResult.IsSuccess) { throw new Exception(getChatChannelResult.Error.Message); } var message = $"Server {msg.Status.ToString().ToLowerInvariant()}."; var chatMessage = new PolychatChatMessageString(sanitisedId, message); var sendMessageResult = await _channelApi.CreateMessageAsync(new(_polychatSettings.ChatChannelId), chatMessage.ToDiscordFormattedString(), ct : cancellationToken); if (!sendMessageResult.IsSuccess) { throw new Exception(getChatChannelResult.Error?.Message ?? "Could not forward message to Discord."); } _logger.LogInformation("Server {id} changed status to {newStatus}", sanitisedId, msg.Status); } else { if (msg.Status == ServerStatus.Types.ServerStatusEnum.Started) { _logger.LogWarning( "Server {id} has unexpectedly sent ServerStatus message before sending ServerInfo message.", sanitisedId); } else { throw new KeyNotFoundException($"Could not find server {sanitisedId} in the list of online servers"); } } }
private void HandleEventBusRequest(TcpRequest request) { SendOkResponse(request.Socket); _logger.LogMessage("Handling event bus request"); var eventBusRequest = JsonConvert.DeserializeObject <EventBusRequest>(request.Body); _crossAppEventBus.ReceiveMessage(eventBusRequest); }
protected override async Task Handle(TcpRequest <ServerPlayerStatusChangedEvent> request, CancellationToken cancellationToken) { var serverId = new PolychatServerIdString(request.Message.NewPlayersOnline.ServerId); var sanitisedId = serverId.ToSanitisedUppercase(); var server = _polychatService.GetOnlineServerOrDefault(sanitisedId); if (server is null) { throw new KeyNotFoundException($"Could not find server {sanitisedId} in the list of online servers"); } var playersOnline = request.Message.NewPlayersOnline.PlayersOnline; var newPlayersList = request.Message.NewPlayersOnline.PlayerNames.ToList(); if (request.Message.NewPlayerStatus is ServerPlayerStatusChangedEvent.Types.PlayerStatus.Left && newPlayersList.Contains(request.Message.PlayerUsername) ) { newPlayersList.Remove(request.Message.PlayerUsername); playersOnline = playersOnline == 0 ? playersOnline : playersOnline - 1; } else if (request.Message.NewPlayerStatus is ServerPlayerStatusChangedEvent.Types.PlayerStatus.Joined && !newPlayersList.Contains(request.Message.PlayerUsername) ) { newPlayersList.Add(request.Message.PlayerUsername); playersOnline += 1; } server.PlayersOnline = playersOnline; server.OnlinePlayerNames = newPlayersList; _polychatService.AddOrUpdateOnlineServer(sanitisedId, server); await _polychatService.ForwardMessage(sanitisedId, request.Message); var messageStr = new PolychatChatMessageString( sanitisedId, $"{request.Message.PlayerUsername} has {request.Message.NewPlayerStatus.ToString().ToLower()} the game."); var getChatChannelResult = await _channelApi.GetChannelAsync(new(_polychatSettings.ChatChannelId), cancellationToken); if (!getChatChannelResult.IsSuccess) { throw new Exception(getChatChannelResult.Error.Message); } var sendMessageResult = await _channelApi.CreateMessageAsync( new(_polychatSettings.ChatChannelId), messageStr.ToDiscordFormattedString(), ct : cancellationToken); if (!sendMessageResult.IsSuccess) { throw new Exception(getChatChannelResult.Error?.Message ?? "Could not forward message to Discord."); } }
protected override void Handle(TcpRequest <ServerInfo> request) { var onlineServer = new OnlineServer(request.Message, request.ConnectedClient); var id = new PolychatServerIdString(request.Message.ServerId); var sanitisedId = id.ToSanitisedUppercase(); _logger.LogInformation("Adding server {id} to the list of online servers...", sanitisedId); _polychatService.AddOrUpdateOnlineServer(sanitisedId, onlineServer); _logger.LogInformation("Added server {id} to the list of online servers.", sanitisedId); }
protected override async Task Handle(TcpRequest <GenericCommandResult> request, CancellationToken cancellationToken) { var msg = request.Message; // we want an exception if failed, as the handler can't proceed if failed, hence Parse instead of TryParse; var parsedId = ulong.Parse(request.Message.DiscordChannelId); var channelSnowflake = new Snowflake(parsedId); var getChannelResult = await _channelApi.GetChannelAsync(channelSnowflake, cancellationToken); if (!getChannelResult.IsSuccess || getChannelResult.Entity is null) { throw new Exception(getChannelResult.Error?.Message ?? $"Could not get channel with ID {parsedId}"); } // because why would ColorTranslator use the established pattern of TryParse // when it can have only one method that throws if it fails to parse instead // FFS Color colour; try { colour = ColorTranslator.FromHtml(request.Message.Colour); } catch { colour = _colourPalette.Blue; } var sendCmdExecutedNotificationResult = await _channelApi.CreateMessageAsync( channelSnowflake, content : $"[{msg.ServerId}] Command `{msg.Command}` executed!", ct : cancellationToken); if (!sendCmdExecutedNotificationResult.IsSuccess) { _logger.LogError("Error while sending command output embed: {Error}", sendCmdExecutedNotificationResult.Error.Message); } var embeds = new List <Embed>(); var output = msg.CommandOutput .Chunk(1024) .Select(chars => new string(chars.ToArray())) .ToList(); embeds .AddRange(output .Select((str, i) => new Embed { Title = $"[{i + 1}/{output.Count}] Command `{msg.Command}`'s output", Fields = new List <EmbedField> { new("Output message", string.IsNullOrEmpty(str) ? "*No output*" : str !, false) },
private void UpdateActAgendaBarStatus(TcpRequest request) { var actAgendaBarStatusRequest = JsonConvert.DeserializeObject <ActAgendaBarStatusRequest>(request.Body); if (actAgendaBarStatusRequest == null) { return; } foreach (var toggleActAgendaBarAction in ToggleActAgendaBarAction.ListOf) { toggleActAgendaBarAction.SetStatus(actAgendaBarStatusRequest.IsVisible); } Send(request.Socket, new OkResponse().ToString()); }
private void HandleRequestStatValue(TcpRequest request) { var statValueRequest = JsonConvert.DeserializeObject <StatValueRequest>(request.Body); _logger.LogMessage($"Handling Stat Value request"); var player = GetPlayer(statValueRequest.Deck); var stat = GetStat(player, statValueRequest.StatType); var response = new StatValueResponse { Value = stat.Value }; Send(request.Socket, response.ToString()); }
public void HandleRequest(TcpRequest request) { RequestReceivedRecently = true; Console.WriteLine("Handling Request: " + request.RequestType.ToString()); switch (request.RequestType) { case AoTcpRequest.ConnectionIsAlive: HandleConnectionIsAliveRequest(request); break; case AoTcpRequest.EventBus: HandleEventBusRequest(request); break; } }
protected override void Handle(TcpRequest <ServerPlayersOnline> request) { var serverId = new PolychatServerIdString(request.Message.ServerId); var sanitisedId = serverId.ToSanitisedUppercase(); var server = _polychatService.GetOnlineServerOrDefault(sanitisedId); if (server is null) { throw new KeyNotFoundException($"Could not find server {sanitisedId} in the list of online servers"); } server.PlayersOnline = request.Message.PlayersOnline; server.OnlinePlayerNames = request.Message.PlayerNames.ToList(); _polychatService.AddOrUpdateOnlineServer(sanitisedId, server); }
protected override async Task Handle(TcpRequest <ChatMessage> request, CancellationToken cancellationToken) { var protoMessage = request.Message; var id = new PolychatServerIdString(protoMessage.ServerId); var sanitisedId = id.ToSanitisedUppercase(); await _polychatService.ForwardMessage(sanitisedId, protoMessage); var getChatChannelResult = await _channelApi.GetChannelAsync(new(_polychatSettings.ChatChannelId), cancellationToken); if (!getChatChannelResult.IsSuccess) { throw new Exception(getChatChannelResult.Error.Message); } var messageTextContent = protoMessage.Message; var sanitisedString = new PolychatChatMessageString(messageTextContent).ToSanitisedString(); var discordMessageInfo = sanitisedString[..protoMessage.MessageOffset];
public Main() { InitializeComponent(); rtxtResponse.ReadOnly = true; LuaRuntime.GetContext().RegisterFunc("LogWriteLine", _responseLog, _responseLog.GetType().GetMethod("WriteLine")); LuaRuntime.GetContext().RegisterFunc("LogWriteTable", _responseLog, _responseLog.GetType().GetMethod("WriteTable")); InitConfig(); TcpRequest.Instance().ReceiveCompleted += OnReceiveCompleted; _watchThread = new Thread(obj => { var instance = obj as Main; while (true) { Thread.Sleep(100); } }); }
private void UpdateInvestigatorImage(TcpRequest request) { var updateInvestigatorImageRequest = JsonConvert.DeserializeObject <UpdateInvestigatorImageRequest>(request.Body); if (updateInvestigatorImageRequest == null) { return; } foreach (var showDeckListAction in ShowDeckListAction.ListOf) { if (showDeckListAction.Deck == updateInvestigatorImageRequest.Deck) { showDeckListAction.SetImageAsync(updateInvestigatorImageRequest.Bytes.AsImage()); } } Send(request.Socket, new OkResponse().ToString()); }
private void UpdateStatInfo(TcpRequest request) { var updateStatInfoRequest = JsonConvert.DeserializeObject <UpdateStatInfoRequest>(request.Body); if (updateStatInfoRequest == null) { return; } foreach (var trackStatAction in TrackStatAction.ListOf) { if ((trackStatAction.Deck == updateStatInfoRequest.Deck) && (trackStatAction.StatType == updateStatInfoRequest.StatType)) { trackStatAction.UpdateValue(updateStatInfoRequest.Value); } } Send(request.Socket, new OkResponse().ToString()); }
private void ProcessRequest(object sender, TcpRequest req) { Logger.Trace("Begin ProcessRequest"); Logger.Info("Requested command: {0}", req.PlayerRequest); if (!req.ResponseRequired) { _commandDictionary[(int)req.PlayerRequest].DynamicInvoke(req.Arguments); return; } try { var res = _commandDictionary[(int)req.PlayerRequest].DynamicInvoke(req.Arguments); _mbTcpHelper.SendResponse(req.PlayerRequest, res); } catch (Exception e) { Logger.Error(e, "Sending response failed"); } Logger.Trace("End ProcessRequest"); }
protected override async Task Handle(TcpRequest <GenericCommandResult> request, CancellationToken cancellationToken) { var msg = request.Message; // we want an exception if failed, as the handler can't proceed if failed, hence Parse instead of TryParse; var parsedId = ulong.Parse(request.Message.DiscordChannelId); var channelSnowflake = new Snowflake(parsedId); var getChannelResult = await _channelApi.GetChannelAsync(channelSnowflake, cancellationToken); if (!getChannelResult.IsSuccess || getChannelResult.Entity is null) { throw new Exception(getChannelResult.Error?.Message ?? $"Could not get channel with ID {parsedId}"); } // because why would ColorTranslator use the established pattern of TryParse // when it can have only one method that throws if it fails to parse instead // FFS Color colour; try { colour = ColorTranslator.FromHtml(request.Message.Colour); } catch { colour = _colourPalette.Blue; } var embeds = new List <Embed> { new() { Title = $"Command `{msg.Command}` executed!", Fields = new List <EmbedField> { new("Server", msg.ServerId, false) }, Timestamp = DateTimeOffset.UtcNow, Colour = colour } };
private void UpdateCardInfo(TcpRequest request) { var updateCardInfoRequest = JsonConvert.DeserializeObject <UpdateCardInfoRequest>(request.Body); if (updateCardInfoRequest == null) { return; } foreach (var cardButtonAction in CardButtonAction.ListOf) { if ((cardButtonAction.Deck == updateCardInfoRequest.Deck) && (cardButtonAction.CardButtonIndex == updateCardInfoRequest.Index) && cardButtonAction.IsVisible && cardButtonAction.ShowCardSet == updateCardInfoRequest.IsCardInSet) { #pragma warning disable CS4014 cardButtonAction.UpdateButtonInfo(updateCardInfoRequest); #pragma warning restore CS4014 } } Send(request.Socket, new OkResponse().ToString()); }
public void HandleRequest(TcpRequest request) { RequestReceivedRecently = true; Console.WriteLine("Handling Request: " + request.RequestType.AsString()); switch (request.RequestType) { case AoTcpRequest.UpdateCardInfo: UpdateCardInfo(request); break; case AoTcpRequest.UpdateStatInfo: UpdateStatInfo(request); break; case AoTcpRequest.UpdateInvestigatorImage: UpdateInvestigatorImage(request); break; case AoTcpRequest.ActAgendaBarStatusRequest: UpdateActAgendaBarStatus(request); break; } }
private string GetResponse(TcpRequest request) { try { if (Client.TcpClient == null || !Client.TcpClient.Connected) { Client.Connect(_ip, _port); } } catch (Exception e) { while (e.InnerException != null) { e = e.InnerException; } return(e.Message); } Client.TcpClient.ReceiveBufferSize = Int32.MaxValue; var response = Client.WriteLineAndGetReply(JsonConvert.SerializeObject(request), TimeSpan.FromSeconds(30))? .MessageString; return(response); }
private void HandleChangeStatValue(TcpRequest request) { var changeStatValueRequest = JsonConvert.DeserializeObject <ChangeStatValueRequest>(request.Body); _logger.LogMessage($"Handling Change Stat Value request"); var player = GetPlayer(changeStatValueRequest.Deck); var stat = GetStat(player, changeStatValueRequest.StatType); if (changeStatValueRequest.Increase) { stat.Increase.Execute(null); } else { stat.Decrease.Execute(null); } var response = new StatValueResponse { Value = stat.Value }; Send(request.Socket, response.ToString()); }
private static void ArdManager_CommandReceived(IArdNetSystem Sender, IConnectedSystemEndpoint ConnectedSystem, TcpRequest Message) { Debug.WriteLine($"CMD: {Message.Request}"); if (Message.Request == "VIBE") { _vibe.Blink(500); } }
public static void Main() { _mpu = Mpu6050.StartNew(2); _mpuArgList = new ArrayList() { "", "", "" }; _led = new PinController.LedBlinker(2); _vibe = new PinController.LedBlinker(13); Debug.WriteLine("Init"); _led.On(); Thread.Sleep(100); _led.Off(); var AppID = "DDRTwistNShout"; var serverUdpPort = 7348; var nanoConfig = new ArdNetClientConfig(AppID, null, serverUdpPort); nanoConfig.TCP.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(2000); nanoConfig.TCP.HeartbeatConfig.ForceStrictHeartbeat = true; nanoConfig.TCP.HeartbeatConfig.RespondToHeartbeats = false; _ardManager = new ArdNetClientManager(SystemConfig.WiFiCredentials, nanoConfig); _ardManager.TcpEndpointConnected += ArdManager_TcpEndpointConnected; _ardManager.TcpEndpointDisconnected += NanoClient_ServerDisconnected; _ardManager.StartWorkerThread(); _ardManager.CommandReceived += ArdManager_CommandReceived; MpuValue data; var spinCmd = TcpRequest.CreateOutbound("SPIN", _mpuArgList); DateTime spinStartTime = DateTime.MinValue; while (true) { data = _mpu.GetData(); //gyro data //x, y, z //_mpuArgList[0] = data.GyroX.ToString(); //_mpuArgList[1] = data.GyroY.ToString(); //_mpuArgList[2] = data.GyroZ.ToString(); //Debug.WriteLine($"[{data.GyroX} {data.GyroY} {data.GyroZ}]"); if (abs(data.GyroY) > 15000 && spinStartTime.Equals(DateTime.MinValue)) { spinStartTime = DateTime.UtcNow; } else if (abs(data.GyroY) < 5000 && !spinStartTime.Equals(DateTime.MinValue)) { var spinTime = (DateTime.UtcNow - spinStartTime).TotalMilliseconds; Debug.WriteLine($"SPIN: {spinTime}"); spinStartTime = DateTime.MinValue; if (spinTime > 800) { _ardManager.EnqueueTask(x => x.SendCommand(spinCmd)); } } Thread.Sleep(10); } }
public void SetUp() { var mock = new Mock <ILogger <TcpRequest> >(); _request = new TcpRequest(mock.Object); }
public static void Main() { #if platform_test && !platform_beetle Configuration.SetPinFunction(23, DeviceFunction.I2C1_DATA); Configuration.SetPinFunction(22, DeviceFunction.I2C1_CLOCK); _mpu = Mpu6050.StartNew(1); #elif !platform_test && platform_beetle _mpu = Mpu6050.StartNew(2); #endif _mpuArgList = new ArrayList() { "", "", "" }; _led = new PinController.LedBlinker(2); _touchController.Init(); _palmTouch = _touchController.OpenPin(27, new TouchPadConfig() { PinSelectMode = TouchPinSelectMode.GpioIndex }); _triggerTouch = _touchController.OpenPin(13, new TouchPadConfig() { PinSelectMode = TouchPinSelectMode.GpioIndex }); Debug.WriteLine("Init"); _led.On(); Thread.Sleep(100); _led.Off(); var AppID = "Esp32.HairTrigger"; var serverUdpPort = 48597; var nanoConfig = new ArdNetClientConfig(AppID, null, serverUdpPort); nanoConfig.TCP.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(2000); nanoConfig.TCP.HeartbeatConfig.ForceStrictHeartbeat = true; nanoConfig.TCP.HeartbeatConfig.RespondToHeartbeats = false; _ardManager = new ArdNetClientManager(SystemConfig.WiFiCredentials, nanoConfig); _ardManager.TcpEndpointConnected += ArdManager_TcpEndpointConnected; _ardManager.TcpEndpointDisconnected += NanoClient_ServerDisconnected; _ardManager.StartWorkerThread(); Debug.WriteLine("Loop"); MpuValue data; DateTime now; while (true) { _ = _serverMsgHandle.WaitOne(); now = DateTime.UtcNow; if (!_palmTouch.IsTouched()) { Thread.Sleep(10); continue; } if ((now - _mpuLastSend).TotalMilliseconds > 75) { data = _mpu.GetData(); //gyro data //x, y, z _mpuArgList[0] = data.GyroX.ToString(); _mpuArgList[1] = data.GyroY.ToString(); _mpuArgList[2] = data.GyroZ.ToString(); var request = TcpRequest.CreateOutbound("MPU", _mpuArgList); _ardManager.EnqueueTask(x => { _ = x.SendCommand(request); }); _mpuLastSend = now; } now = DateTime.UtcNow; if (!_triggerIsDown && (now - _triggerLastSend).TotalMilliseconds > 50) { if (_triggerTouch.IsTouched()) { _ardManager.EnqueueTask(x => x.SendCommand(_triggerTcpRequest_Down)); _triggerIsDown = true; _triggerLastSend = now; } } else if (_triggerIsDown && (now - _triggerLastSend).TotalMilliseconds > 10) { if (!_triggerTouch.IsTouched()) { _ardManager.EnqueueTask(x => x.SendCommand(_triggerTcpRequest_Up)); _triggerIsDown = false; _triggerLastSend = now; } } } }
private void HandleConnectionIsAliveRequest(TcpRequest request) { Send(request.Socket, new OkResponse().ToString()); }