private void MessageReceived(object sender, EventArgs e) { var msgArgs = e as MessageEventArgs; if (msgArgs != null) { var st = new System.Diagnostics.Stopwatch(); Response response = null; var context = new Context(); try { st.Start(); var eve = NuclioSerializationHelpers <Event> .Deserialize(msgArgs.Message); context.Logger.LogEvent += LogEvent; var result = InvokeFunction(context, eve); response = CreateResponse(result); } catch (Exception ex) { response = CreateResponse(ex); } finally { st.Stop(); context.Logger.LogEvent -= LogEvent; var metric = new Metric() { Duration = st.Elapsed.TotalSeconds }; socketHandler.SendMessage(string.Join(String.Empty, "m", NuclioSerializationHelpers <Metric> .Serialize(metric), Environment.NewLine)); socketHandler.SendMessage(string.Join(String.Empty, "r", NuclioSerializationHelpers <Response> .Serialize(response), Environment.NewLine)); } } }
/// <summary> /// Handle the command /// </summary> /// <param name="socket"></param> /// <param name="nickname"></param> /// <param name="rawMessage"></param> /// <returns></returns> public async Task <string> Handle(WebSocket socket, string nickname, string rawMessage) { var result = ""; var messageSplitted = rawMessage.Split(' '); if (!IsValidCommand(messageSplitted[0].Replace("/", string.Empty), messageSplitted.Length)) { result = ServerMessageConstants.GetMessage(ServerMessageConstants.COMMAND_INVALID, messageSplitted[0]); await _socketHandler.SendMessage(socket, result); } switch (messageSplitted[0]) { case "/p": result = await SendPrivateMessageCommand(socket, nickname, rawMessage, messageSplitted); break; case "/exit": result = await ExecuteExitCommand(socket); break; case "/changenickname": result = await ChangeNickNameCommand(socket, nickname, messageSplitted); break; case "/help": result = await ShowHelpListCommand(socket); break; } return(result); }
/// <summary> /// Handle the client registration /// </summary> /// <param name="socket"></param> /// <param name="nickname"></param> /// <param name="rawMessage"></param> /// <returns></returns> public async Task <string> Handle(WebSocket socket, string nickname, string rawMessage) { var result = ""; if (!IsValidNickName(rawMessage)) { result = ServerMessageConstants.GetMessage(ServerMessageConstants.NICKNAME_INVALID, rawMessage); await _socketHandler.SendMessage(socket, result); return(result); } if (_connectionManager.IsNickNameExists(rawMessage)) { result = ServerMessageConstants.GetMessage(ServerMessageConstants.NICKNAME_ALREADY_TAKEN, rawMessage); await _socketHandler.SendMessage(socket, result); return(result); } if (_connectionManager.RegisterNickName(socket, rawMessage)) { result = ServerMessageConstants.GetMessage(ServerMessageConstants.SUCCESSFULLY_REGISTERED, rawMessage); await _socketHandler.SendMessage(socket, result); var message = ServerMessageConstants.GetMessage(ServerMessageConstants.JOINED_GENERAL_CHANNEL, rawMessage); await _socketHandler.SendMessageToAll(message); } return(result); }