Beispiel #1
0
            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);
            }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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)})");
        }
Beispiel #4
0
            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)));
        }
Beispiel #6
0
            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);
            }
Beispiel #7
0
            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);
        }
Beispiel #10
0
            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);
        }
Beispiel #14
0
 private void WriteInt(IodineInteger integer)
 {
     binaryWriter.Write((byte)DataType.IntObject);
     binaryWriter.Write(integer.Value);
 }