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}'"); }
public byte[] GetToken() { Send(BinaryMessage.Make(CMD_GETTOKEN).Complete()); var reply = GetReply(); return(reply.Type == 0 ? reply.GetData() : null); }
protected override BinaryMessage GetHelloMessage(string userName, byte[] cookie) { return(BinaryMessage.Make(MSG_SESS) .UInt16(1) .String("Haven") .UInt16(ProtocolVersion) .String(userName) .Bytes(cookie) .Complete()); }
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"); } }
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()); }
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)); }
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)); }
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()); }