Esempio n. 1
0
        public override void Send <TMessage>(TMessage message)
        {
            var gridRequest = message as MapRequestGrid;

            if (gridRequest != null)
            {
                var msg = BinaryMessage.Make(MSG_MAPREQ)
                          .Coord(gridRequest.Coord)
                          .Complete();
                Send(msg);
                return;
            }

            var widgetMessage = message as WidgetMessage;

            if (widgetMessage != null)
            {
                var msg = BinaryMessage.Make(RMSG_WDGMSG)
                          .UInt16(widgetMessage.WidgetId)
                          .String(widgetMessage.Name);

                if (widgetMessage.Args != null)
                {
                    msg.List(widgetMessage.Args);
                }

                SendSeqMessage(msg.Complete());
                return;
            }

            throw new ArgumentException($"Unsupported outgoing message type '{message.GetType().Name}'");
        }
Esempio n. 2
0
        public byte[] GetToken()
        {
            Send(BinaryMessage.Make(CMD_GETTOKEN).Complete());
            var reply = GetReply();

            return(reply.Type == 0 ? reply.GetData() : null);
        }
Esempio n. 3
0
 protected override BinaryMessage GetHelloMessage(string userName, byte[] cookie)
 {
     return(BinaryMessage.Make(MSG_SESS)
            .UInt16(1)
            .String("Haven")
            .UInt16(ProtocolVersion)
            .String(userName)
            .Bytes(cookie)
            .Complete());
 }
Esempio n. 4
0
        private void BindUser(string userName)
        {
            var msg = BinaryMessage.Make(CMD_USR).Chars(userName).Complete();

            Send(msg);
            var reply = GetReply();

            if (reply.Type != 0)
            {
                throw new AuthException("Unhandled reply " + reply.Type + " when binding username");
            }
        }
Esempio n. 5
0
 protected override BinaryMessage GetHelloMessage(string sessionId, byte[] cookie)
 {
     return(BinaryMessage.Make(MSG_SESS)
            .UInt16(2)
            .String("Hafen")
            .UInt16(ProtocolVersion)
            .String(sessionId)
            .UInt16((ushort)cookie.Length)
            .Bytes(cookie)
            .List()
            .Complete());
 }
Esempio n. 6
0
        public AuthResult TryToken(string userName, byte[] token)
        {
            BindUser(userName);
            Send(BinaryMessage.Make(CMD_USETOKEN).Bytes(token).Complete());
            var reply = GetReply();

            if (reply.Type != 0)
            {
                return(AuthResult.Fail());
            }
            var cookie = reply.GetData();

            return(AuthResult.Success(userName, cookie));
        }
Esempio n. 7
0
        public AuthResult TryPassword(string userName, string password)
        {
            BindUser(userName);
            byte[] phash = Digest(password);
            Send(BinaryMessage.Make(CMD_PASSWD).Bytes(phash).Complete());
            var reply = GetReply();

            if (reply.Type != 0)
            {
                return(AuthResult.Fail());
            }
            var cookie = reply.GetData();

            return(AuthResult.Success(userName, cookie));
        }
Esempio n. 8
0
        private BinaryDataReader Call(string cmd, params object[] args)
        {
            var msg = BinaryMessage.Make(0).String(cmd);

            foreach (var arg in args)
            {
                if (arg is string)
                {
                    msg.String((string)arg);
                }
                else if (arg is byte[])
                {
                    msg.Bytes((byte[])arg);
                }
                else
                {
                    throw new ArgumentException("Illegal argument: " + arg.GetType().FullName);
                }
            }
            Send(msg.Complete());
            return(GetReply());
        }