private void HandleMarketmakerThread(object obj) { TcpClient client = obj as TcpClient; while (true) { //получаем команду, парсим и ставим в очередь string received = SocketIO.Read(client); Console.WriteLine(DateTime.Now + " MARKETMAKER: received " + received); if (received == "dc") { break; } string[] json_fcs = received.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < json_fcs.Length; i++) { //JSON-парсинг вызова функции ядра int func_id; string[] str_args; bool _parsed = JsonManager.ParseTechJson(json_fcs[i], out func_id, out str_args); if (_parsed) { Console.WriteLine(DateTime.Now + " MARKETMAKER: to queue function #" + func_id); MarketmakerRequest.QueueFC(client, func_id, str_args); //попытка парсинга аргументов и постановки в очередь соответствующей функции } else //ошибка JSON-парсинга { CoreResponse.RejectInvalidJson(client); } } } client.Close(); Console.WriteLine(DateTime.Now + " MARKETMAKER: connection closed"); }
internal static void RejectInvalidFuncArgs(TcpClient client) { SocketIO.Write(client, JsonManager.FormTechJson((int)StatusCodes.ErrorInvalidFunctionArguments)); Console.WriteLine(DateTime.Now + " CORE: [invalid arguments provided]"); }
internal static void AcceptFC(TcpClient client, long func_call_id) //запрос успешно обработан и будет поставлен в очередь { SocketIO.Write(client, JsonManager.FormTechJson((int)StatusCodes.Success, func_call_id)); Console.WriteLine(DateTime.Now + " CORE: accepted call #" + func_call_id); }
internal static void RejectMarketClosed(TcpClient client) //отклонение запроса из-за приостановки торгов { SocketIO.Write(client, JsonManager.FormTechJson((int)StatusCodes.ErrorMarketClosed)); Console.WriteLine(DateTime.Now + " CORE: [market closed]"); }
internal static void RejectInvalidJson(TcpClient client) //отклонение запроса из-за невалидного JSON { SocketIO.Write(client, JsonManager.FormTechJson((int)StatusCodes.ErrorInvalidJsonInput)); Console.WriteLine(DateTime.Now + " CORE: [tech JSON parse failed]"); }
internal static void RejectFuncNotFound(TcpClient client) //отклонение запроса из-за отсутствия функции в ядре { SocketIO.Write(client, JsonManager.FormTechJson((int)StatusCodes.ErrorFunctionNotFound)); Console.WriteLine(DateTime.Now + " CORE: [function not found]"); }