private IodineObject connect(VirtualMachine vm, IodineObject self, IodineObject[] args) { IodineString ipAddrStr = args [0] as IodineString; IodineInteger portObj = args [1] as IodineInteger; IPAddress ipAddr; int port = (int)portObj.Value; EndPoint endPoint = null; if (!IPAddress.TryParse(ipAddrStr.ToString(), out ipAddr)) { endPoint = new IPEndPoint(DnsLookUp(ipAddrStr.ToString()), port); } else { endPoint = new IPEndPoint(ipAddr, port); } try { Socket.Connect(endPoint); stream = new NetworkStream(this.Socket); } catch (Exception ex) { vm.RaiseException("Could not connect to socket! (Reason: {0})", ex.Message); return(null); } return(null); }
public IodineSlice(IodineInteger start, IodineInteger stop, IodineInteger stride) : base(SliceTypeDefinition) { if (start != null) { Start = (int)start.Value; } else { DefaultStart = true; } if (stop != null) { Stop = (int)stop.Value; } else { DefaultStop = true; } Stride = (int)stride.Value; SetAttribute("start", (IodineObject)start ?? IodineNull.Instance); SetAttribute("stop", (IodineObject)stop ?? IodineNull.Instance); SetAttribute("stride", stride); }
static string IodineRangeFormatter(IodineObject target, string start, string stop) { var range = (IodineRange)target; var rangeFields = range.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic); var rangeStart = new IodineInteger((long)rangeFields.First(field => field.Name == "min").GetValue(range)); var rangeStop = new IodineInteger((long)rangeFields.First(field => field.Name == "end").GetValue(range)); var rangeStep = new IodineInteger((long)rangeFields.First(field => field.Name == "step").GetValue(range)); return($"Range (start: {Format (rangeStart)} stop: {Format (rangeStop)} step: {Format (rangeStep)})"); }
private IodineByteArray receiveRaw(VirtualMachine vm, IodineObject self, IodineObject[] args) { IodineInteger n = args [0] as IodineInteger; byte[] buf = new byte[n.Value]; for (int i = 0; i < n.Value; i++) { buf [i] = (byte)stream.ReadByte(); } return(new IodineByteArray(buf)); }
private static IodineObject ColorPair(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length == 0) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineInteger index = args [0] as IodineInteger; return(new AttributeWrapper(activeTerminal.ColorPair((int)index.Value))); }
private IodineObject listen(VirtualMachine vm, IodineObject self, IodineObject[] args) { IodineInteger backlogObj = args [0] as IodineInteger; try { int backlog = (int)backlogObj.Value; Socket.Listen(backlog); } catch { vm.RaiseException("Could not listen to socket!"); return(null); } return(null); }
private IodineObject receive(VirtualMachine vm, IodineObject self, IodineObject[] args) { IodineInteger n = args [0] as IodineInteger; StringBuilder accum = new StringBuilder(); for (int i = 0; i < n.Value; i++) { int b = stream.ReadByte(); if (b != -1) { accum.Append((char)b); } } return(new IodineString(accum.ToString())); }
private IodineObject Bind(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length < 2) { vm.RaiseException(new IodineArgumentException(2)); return(null); } IodineString ipAddrStr = args [0] as IodineString; IodineInteger portObj = args [1] as IodineInteger; if (ipAddrStr == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } else if (portObj == null) { vm.RaiseException(new IodineTypeException("Int")); return(null); } IPAddress ipAddr; int port = (int)portObj.Value; EndPoint endPoint = null; if (!IPAddress.TryParse(ipAddrStr.ToString(), out ipAddr)) { endPoint = new IPEndPoint(DnsLookUp(ipAddrStr.ToString()), port); } else { endPoint = new IPEndPoint(ipAddr, port); } try { Socket.Bind(endPoint); } catch { vm.RaiseException("Could not bind to socket!"); return(null); } return(null); }
private static IodineObject CurseSet(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length == 0) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineInteger index = args [0] as IodineInteger; if (index == null) { vm.RaiseException(new IodineTypeException("Int")); return(null); } activeTerminal.CurseSet((int)index.Value); return(null); }
private IodineObject connectSsl(VirtualMachine vm, IodineObject self, IodineObject[] args) { IodineString ipAddrStr = args [0] as IodineString; IodineInteger portObj = args [1] as IodineInteger; IPAddress ipAddr; int port = (int)portObj.Value; EndPoint endPoint = null; if (!IPAddress.TryParse(ipAddrStr.ToString(), out ipAddr)) { endPoint = new IPEndPoint(DnsLookUp(ipAddrStr.ToString()), port); } else { endPoint = new IPEndPoint(ipAddr, port); } try { Socket.Connect(endPoint); } catch { vm.RaiseException("Could not connect to socket!"); return(null); } try { stream = new SslStream(new NetworkStream(Socket), false, ValidateServerCertificate, null); } catch (Exception e) { vm.RaiseException(e.Message); return(null); } try { ((SslStream)stream).AuthenticateAsClient(host); } catch (Exception e) { vm.RaiseException(e.Message); return(null); } return(null); }
private static IodineObject Move(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length < 2) { vm.RaiseException(new IodineArgumentException(2)); return(null); } IodineInteger yPos = args [0] as IodineInteger; IodineInteger xPos = args [1] as IodineInteger; if (xPos == null || yPos == null) { vm.RaiseException(new IodineTypeException("Int")); return(null); } activeTerminal.Move((int)yPos.Value, (int)xPos.Value); return(null); }
private static IodineObject InitPair(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length < 3) { vm.RaiseException(new IodineArgumentException(3)); return(null); } IodineInteger index = args [0] as IodineInteger; IodineInteger fg = args [1] as IodineInteger; IodineInteger bg = args [2] as IodineInteger; if (index == null || fg == null || bg == null) { vm.RaiseException(new IodineTypeException("Int")); return(null); } activeTerminal.InitPair((int)index.Value, (int)fg.Value, (int)bg.Value); return(null); }
private static IodineObject Mvprint(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length < 3) { vm.RaiseException(new IodineArgumentException(3)); return(null); } IodineInteger yPos = args [0] as IodineInteger; IodineInteger xPos = args [1] as IodineInteger; if (xPos == null || yPos == null) { vm.RaiseException(new IodineTypeException("Int")); return(null); } string message = args [2].ToString(); activeTerminal.Move((int)yPos.Value, (int)xPos.Value); activeTerminal.Print(message); return(null); }
private void WriteInt(IodineInteger integer) { binaryWriter.Write((byte)DataType.IntObject); binaryWriter.Write(integer.Value); }