internal bool ReplaceNumeric(string name, string[] values, double val) { int ix; DBField field = FetchField(name, out ix); if (field == null) { ServerLog.Register("El campo \"" + name + "\" no existe en la tabla \"" + Name + "\"."); return(false); } if (field.Type != DB.FieldTypeNumeric) { ServerLog.Register("El campo \"" + name + "\" en la tabla \"" + Name + "\" no es numérico."); return(false); } string fmt; if (field.Decimals > 0) { int intpos = field.Size - field.Decimals - 1; fmt = "{0:".PadRight(intpos + 3, '0') + "." + "".PadRight(field.Decimals, '0') + "}"; } else { fmt = "{0:".PadRight(field.Size + 3, '0') + "}"; } values[ix] = String.Format(fmt, val); return(true); }
static void Read(IAsyncResult resul) { String command = String.Empty; Request request = (Request)resul.AsyncState; Socket handler = request.Socket; try { int bRead = handler.EndReceive(resul); if (bRead > 0) { if (request.Read(bRead)) { if (request.Remaining == 0) { Reply(request); } else { handler.BeginReceive(request.Buffer, 0, Request.BufferSize, 0, new AsyncCallback(Read), request); } } } else { ServerLog.Register("Error de lectura. Cero bytes recibidos.", true); } } catch (Exception e) { ServerLog.Register(e.Message); } }
public static void Listen(int port) { ServerLog.Register("Iniciando...", true); IPHostEntry hostInfo = Dns.GetHostEntry(Dns.GetHostName()); IPAddress address = hostInfo.AddressList[0]; EndPoint endPoint = new IPEndPoint(address, port); Socket listener = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); try { listener.Bind(endPoint); listener.Listen(100); ServerLog.Register("¡Escuchando!", true); while (true) { Done.Reset(); listener.BeginAccept(new AsyncCallback(Accept), listener); Done.WaitOne(); } } catch (Exception e) { ServerLog.Register(e.Message, true); } }
public bool Read(int bRead) { StrBulder.Append(Encoding.ASCII.GetString(Buffer, 0, bRead)); if (Remaining == -1) { String command = StrBulder.ToString(); int pos = command.IndexOf(":"); if (pos > -1) { try { CommandLen = int.Parse(command.Substring(0, pos)); } catch (FormatException) { ServerLog.Register("Solicitud inválida. Se especificó un dato no numérico en \"Tamaño\"", true); return(false); } } else { ServerLog.Register("Solicitud inválida. Falta delimitador de \"Tamaño\" (\":\").", true); return(false); } CommandPt = pos + 1; Remaining = CommandLen + CommandPt; } Remaining -= bRead; if (Remaining < 0) { ServerLog.Register("Tamaño manifestado en la solicitud es menor a los datos enviados", true); return(false); } return(true); }
static void Reply(Request request) { string[] command = request.Command(); ServerLog.Register(command[0]); string reply = IPServ.Process(command); byte[] response = Encoding.ASCII.GetBytes(String.Format("{0}:{1}", reply.Length, reply)); Socket handler = request.Socket; handler.BeginSend(response, 0, response.Length, 0, new AsyncCallback(Send), handler); }
static void Send(IAsyncResult resul) { try { Socket handler = (Socket)resul.AsyncState; int bytesSent = handler.EndSend(resul); Request request = new Request(); request.Socket = handler; handler.BeginReceive(request.Buffer, 0, Request.BufferSize, 0, new AsyncCallback(Read), request); } catch (Exception e) { ServerLog.Register(e.ToString()); } }
internal static bool CanSaveStruct(string name) { if (Tables.ContainsKey(name)) { ServerLog.Register("Se intentó crear \"" + name + "\" pero la tabla ya está abierta."); return(false); } if (DBFile.Exists(name)) { ServerLog.Register("Se intentó crear \"" + name + "\" pero la tabla ya existe."); return(false); } return(true); }
internal void SetField(int ix, string name, byte type, int size, byte decimals) { if (DBStream != null) { ServerLog.Register("Se intentó inicializar la columna \"" + name + "\" en la tabla \"" + Name + "\" pero la tabla ya está abierta."); return; } if (ix > FieldCount) { ServerLog.Register("Se intentó inicializar la columna " + ix.ToString() + " en la tabla \"" + Name + "\" pero la estructura solo contiene " + FieldCount.ToString() + " columnas."); return; } Fields[ix] = new DBField(name, type, size, decimals); }
public static string Save(string[] param) { if (param.Length != 3) { ServerLog.Register("Esperando 2 parameteros en: save."); return("ERROR"); } try { Image <Gray, byte> Img = new Image <Gray, byte>(100, 100); Img.Bytes = Convert.FromBase64String(param[2]); FaceList.Save(param[1], Img); return("OK"); } catch (Exception e) { ServerLog.Register(e.Message); return("ERROR"); } }
internal string ReadString(string name, string[] values) { int ix; DBField field = FetchField(name, out ix); if (field == null) { ServerLog.Register("El campo \"" + name + "\" no existe en la tabla \"" + Name + "\"."); return(String.Empty); } if (field.Type != DB.FieldTypeString) { ServerLog.Register("El campo \"" + name + "\" en la tabla \"" + Name + "\" no es texto."); return(String.Empty); } return(values[ix]); }
public static string Test(string[] param) { if (param.Length != 4) { ServerLog.Register("Esperando 3 parameteros en: test."); return("ERROR"); } try { Image <Gray, byte> Img = new Image <Gray, byte>(100, 100); Img.Bytes = Convert.FromBase64String(param[3]); return(FaceList.Test(param[1] == "T", param[2], Img)); } catch (Exception e) { ServerLog.Register(e.Message); return("ERROR"); } }
internal static DBStatus Open(string name) { if (Tables.ContainsKey(name)) { DBFile tab = Tables[name]; return(tab.Open()); } if (!DBFile.Exists(name)) { ServerLog.Register("No se pudo abrir la table \"" + name + "\", debido a que no existe."); return(null); } DBFile table = new DBFile(name); DBStatus status = table.Open(); Tables.Add(name, table); return(status); }
internal bool ReplaceString(string name, string[] values, string val) { int ix; DBField field = FetchField(name, out ix); if (field == null) { ServerLog.Register("El campo \"" + name + "\" no existe en la tabla \"" + Name + "\"."); return(false); } if (field.Type != DB.FieldTypeString) { ServerLog.Register("El campo \"" + name + "\" en la tabla \"" + Name + "\" no es texto."); return(false); } values[ix] = val.PadRight(field.Size).Substring(0, field.Size); return(true); }
internal DBStatus Open() { if (OpenCount > 0) { OpenCount++; DBStatus stat = new DBStatus(); stat.Values = new string[FieldCount]; stat.BlankRow(); return(stat); } try { DBStream = new FileStream(DataFileName(Name + DBFEXENSION), FileMode.Open); }catch (Exception e) { LogError(e); return(null); } Formatter = new BinaryFormatter(); Header = (DBHeader)Formatter.Deserialize(DBStream); if (!Header.IsValid()) { DBStream.Close(); ServerLog.Register("No se puedo abrir \"" + Name + "\" debido a que el encabezado es inválido."); return(null); } FieldCount = Header.Fields; Fields = new DBField[FieldCount]; for (int i = 0; i < FieldCount; i++) { DBField field = (DBField)Formatter.Deserialize(DBStream); field.Name = Encoding.ASCII.GetString(field.BName).Trim(); Fields[i] = field; } DBStatus status = new DBStatus(); status.Table = this; status.Values = new string[FieldCount]; status.BlankRow(); return(status); }
internal double ReadNumeric(string name, string[] values) { int ix; DBField field = FetchField(name, out ix); if (field == null) { ServerLog.Register("El campo \"" + name + "\" no existe en la tabla \"" + Name + "\"."); return(0); } if (field.Type != DB.FieldTypeString) { ServerLog.Register("El campo \"" + name + "\" en la tabla \"" + Name + "\" no es texto."); return(0); } try { return(Convert.ToDouble(values[ix])); } catch (Exception) { ServerLog.Register("El campo \"" + name + "\" de la tabla \"" + Name + "\" no se puede convertir a \"double\"."); return(0); } }
void LogError(Exception e) { ServerLog.Register(String.Format("Tabla \"{0}\": {1}", Name, e.Message), true); }
internal string[] SaveStruct() { int rsize = 0; int fieldCt = Fields.Length; MemoryStream stream = new MemoryStream(); Formatter = new BinaryFormatter(); Header = new DBHeader(); FieldCount = 0; Formatter.Serialize(stream, Header); int ix; for (int i = 0; i < fieldCt; i++) { DBField field = Fields[i]; switch (field.Type) { case DB.FieldTypeString: break; case DB.FieldTypeNumeric: break; default: ServerLog.Register("Se intentó crear \"" + Name + "\" con al menos un tipo de dato inválido."); return(null); } if (FetchField(field.Name, out ix) != null) { ServerLog.Register("Se intentó crear \"" + Name + "\" con al menos un campo duplicado."); return(null); } FieldCount++; field.Offset = rsize; rsize += field.Size; Formatter.Serialize(stream, field); } if (rsize == 0) { ServerLog.Register("Se intentó crear \"" + Name + "\" pero la longitud del registro es cero."); return(null); } Header.Fields = fieldCt; Header.RowSize = rsize; Header.HeaderSize = stream.Position; Header.VirtualEOF = stream.Position; stream.Position = 0; Formatter.Serialize(stream, Header); try { DBStream = new FileStream(DataFileName(Name + DBFEXENSION), FileMode.CreateNew); byte[] bytes = stream.ToArray(); DBStream.Write(bytes, 0, bytes.Length); stream.Close(); DBStream.Flush(); OpenCount++; } catch (Exception e) { LogError(e); return(null); } string[] values = new string[FieldCount]; BlankRow(values); return(values); }