Merge pull request #1 from sochix/master

Ilya's Works
This commit is contained in:
Afshin Arani 2016-10-16 21:22:44 +03:30 committed by GitHub
commit 7d436e3954
5 changed files with 89 additions and 92 deletions

View file

@ -148,16 +148,16 @@ Contributing is highly appreciated!
#### Release 1.0.0 #### Release 1.0.0
* Add PHONE_MIGRATE handling * [DONE] Add PHONE_MIGRATE handling
* Add Updates handling * Add Updates handling
* Add NuGet package * Add NuGet package
* Add wrappers for media uploading * [WIP] Add wrappers for media uploading
* Store user session as JSON * Store user session as JSON
# FAQ # FAQ
#### What API layer is supported? #### What API layer is supported?
The latest one - 53. Thanks to Afshin Arani The latest one - 57. Thanks to Afshin Arani for his TLGenerator
#### I get an error MIGRATE_X? #### I get an error MIGRATE_X?

View file

@ -54,8 +54,9 @@ namespace TLSharp.Core
public class Session public class Session
{ {
private const string defaultConnectionAddress = "91.108.56.165"; private const string defaultConnectionAddress = "149.154.175.100";//"149.154.167.50";
private const int defaultConnectionPort = 443;
private const int defaultConnectionPort = 443;
public string SessionUserId { get; set; } public string SessionUserId { get; set; }
public string ServerAddress { get; set; } public string ServerAddress { get; set; }

View file

@ -25,8 +25,8 @@ namespace TLSharp.Core
public TelegramClient(int apiId, string apiHash, ISessionStore store = null, string sessionUserId = "session") public TelegramClient(int apiId, string apiHash, ISessionStore store = null, string sessionUserId = "session")
{ {
if (store == null) if (store == null)
store = new FileSessionStore(); store = new FileSessionStore();
TLContext.Init(); TLContext.Init();
_apiHash = apiHash; _apiHash = apiHash;
@ -51,16 +51,14 @@ namespace TLSharp.Core
_sender = new MtProtoSender(_transport, _session); _sender = new MtProtoSender(_transport, _session);
if (!reconnect) //set-up layer
{ var config = new TLRequestGetConfig();
var config = new TLRequestGetConfig() ; var request = new TLRequestInitConnection() { api_id = _apiId, app_version = "1.0.0", device_model = "PC", lang_code = "en", query = config, system_version = "Win 10.0" };
var request = new TLRequestInitConnection() { api_id = _apiId, app_version = "1.0.0", device_model = "PC", lang_code = "en", query= config, system_version = "Win 10.0" }; var invokewithLayer = new TLRequestInvokeWithLayer() { layer = 57, query = request };
var invokewithLayer = new TLRequestInvokeWithLayer() { layer = 53, query = request }; await _sender.Send(invokewithLayer);
await _sender.Send(invokewithLayer); await _sender.Receive(invokewithLayer);
await _sender.Receive(invokewithLayer);
dcOptions = ((TLConfig)invokewithLayer.Response).dc_options.lists; dcOptions = ((TLConfig)invokewithLayer.Response).dc_options.lists;
}
return true; return true;
} }
@ -154,56 +152,55 @@ namespace TLSharp.Core
await _sender.Send(methodtoExceute); await _sender.Send(methodtoExceute);
await _sender.Receive(methodtoExceute); await _sender.Receive(methodtoExceute);
var result = methodtoExceute.GetType().GetProperty("Response").GetValue(methodtoExceute); var result = methodtoExceute.GetType().GetProperty("Response").GetValue(methodtoExceute);
return (T)result; return (T)result;
} }
public async Task<TLContacts> GetContactsAsync()
{
if (!IsUserAuthorized())
throw new InvalidOperationException("Authorize user first!");
public async Task<TLContacts> GetContactsAsync() var req = new TLRequestGetContacts() { hash = "" };
{
if (!IsUserAuthorized())
throw new InvalidOperationException("Authorize user first!");
var req = new TLRequestGetContacts() {hash = ""}; return await SendRequestAsync<TLContacts>(req);
}
return await SendRequestAsync<TLContacts>(req); public async Task<TLAbsUpdates> SendMessageAsync(TLAbsInputPeer peer, string message)
} {
if (!IsUserAuthorized())
throw new InvalidOperationException("Authorize user first!");
public async Task<TLAbsUpdates> SendMessageAsync(TLAbsInputPeer peer, string message) long uniqueId = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds);
{
if (!IsUserAuthorized())
throw new InvalidOperationException("Authorize user first!");
long uniqueId = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds); return await SendRequestAsync<TLAbsUpdates>(
new TLRequestSendMessage()
{
peer = peer,
message = message,
random_id = uniqueId
});
}
return await SendRequestAsync<TLAbsUpdates>( public async Task<Boolean> SendTypingAsync(TLAbsInputPeer peer)
new TLRequestSendMessage() {
{ var req = new TLRequestSetTyping()
peer = peer, {
message = message, action = new TLSendMessageTypingAction(),
random_id = uniqueId peer = peer
}); };
} return await SendRequestAsync<Boolean>(req);
}
public async Task<Boolean> SendTypingAsync(TLAbsInputPeer peer) public async Task<TLDialogs> GetUserDialogsAsync()
{ {
var req = new TLRequestSetTyping() var peer = new TLInputPeerSelf();
{ return await SendRequestAsync<TLDialogs>(
action = new TLSendMessageTypingAction(), new TLRequestGetDialogs() { offset_date = 0, offset_peer = peer, limit = 100 });
peer = peer }
};
return await SendRequestAsync<Boolean>(req);
}
public async Task<TLDialogs> GetUserDialogsAsync() private void OnUserAuthenticated(TLUser TLUser)
{
var peer = new TLInputPeerSelf();
return await SendRequestAsync<TLDialogs>(
new TLRequestGetDialogs() { offset_date = 0, offset_peer = peer, limit = 100 });
}
private void OnUserAuthenticated(TLUser TLUser)
{ {
_session.TLUser = TLUser; _session.TLUser = TLUser;
_session.SessionExpires = int.MaxValue; _session.SessionExpires = int.MaxValue;

View file

@ -72,7 +72,7 @@ namespace TeleSharp.Generator
if (nspace.EndsWith(".")) if (nspace.EndsWith("."))
nspace = nspace.Remove(nspace.Length - 1, 1); nspace = nspace.Remove(nspace.Length - 1, 1);
string temp = NormalStyle.Replace("/* NAMESPACE */", "TeleSharp." + nspace); string temp = NormalStyle.Replace("/* NAMESPACE */", "TeleSharp." + nspace);
temp = (c.type == "himself") ? temp.Replace("/* PARENT */", "TLObject") : temp.Replace("/* PARENT */", GetNameofClass(c.type, true)); temp = (c.type == "himself") ? temp.Replace("/* PARENT */", "TLObject") : temp.Replace("/* PARENT */", GetNameofClass(c.type, true));
temp = temp.Replace("/*Constructor*/", c.id.ToString()); temp = temp.Replace("/*Constructor*/", c.id.ToString());
temp = temp.Replace("/* NAME */", GetNameofClass(c.predicate, false)); temp = temp.Replace("/* NAME */", GetNameofClass(c.predicate, false));
#endregion #endregion
@ -129,11 +129,7 @@ namespace TeleSharp.Generator
} }
foreach (var c in schema.methods) foreach (var c in schema.methods)
{ {
if (c.method.Contains("updateUsername")) string path = (GetNameSpace(c.method).Replace("TeleSharp.TL", "TL\\").Replace(".", "") + "\\" + GetNameofClass(c.method, false, true) + ".cs").Replace("\\\\", "\\");
{
}
string path = (GetNameSpace(c.method).Replace("TeleSharp.TL", "TL\\").Replace(".", "") + "\\" + GetNameofClass(c.method, false,true) + ".cs").Replace("\\\\", "\\");
FileStream classFile = MakeFile(path); FileStream classFile = MakeFile(path);
using (StreamWriter writer = new StreamWriter(classFile)) using (StreamWriter writer = new StreamWriter(classFile))
{ {
@ -144,7 +140,7 @@ namespace TeleSharp.Generator
string temp = MethodStyle.Replace("/* NAMESPACE */", "TeleSharp." + nspace); string temp = MethodStyle.Replace("/* NAMESPACE */", "TeleSharp." + nspace);
temp = temp.Replace("/* PARENT */", "TLMethod"); temp = temp.Replace("/* PARENT */", "TLMethod");
temp = temp.Replace("/*Constructor*/", c.id.ToString()); temp = temp.Replace("/*Constructor*/", c.id.ToString());
temp = temp.Replace("/* NAME */", GetNameofClass(c.method, false,true)); temp = temp.Replace("/* NAME */", GetNameofClass(c.method, false, true));
#endregion #endregion
#region Fields #region Fields
string fields = ""; string fields = "";
@ -244,7 +240,7 @@ namespace TeleSharp.Generator
else if (type.IndexOf('.') != -1 && type.IndexOf('?') != -1) else if (type.IndexOf('.') != -1 && type.IndexOf('?') != -1)
return "TLRequest" + FormatName(type.Split('?')[1]); return "TLRequest" + FormatName(type.Split('?')[1]);
else else
return "TLRequest" + FormatName(type) ; return "TLRequest" + FormatName(type);
} }
} }
private static bool IsFlagBase(string type) private static bool IsFlagBase(string type)
@ -274,13 +270,12 @@ namespace TeleSharp.Generator
{ {
string innerType = type.Split('?')[1]; string innerType = type.Split('?')[1];
if (innerType == "true") return result; if (innerType == "true") return result;
else if ((new string[] {"bool","int", "uint", "long", "double" }).Contains(result)) return result + "?"; else if ((new string[] { "bool", "int", "uint", "long", "double" }).Contains(result)) return result + "?";
else return result; else return result;
} }
} }
public static string GetTypeName(string type) public static string GetTypeName(string type)
{ {
if (type.ToLower().Contains("inputcontact")) return "TLInputPhoneContact";
switch (type.ToLower()) switch (type.ToLower())
{ {
case "#": case "#":
@ -304,35 +299,39 @@ namespace TeleSharp.Generator
case "x": case "x":
return "TLObject"; return "TLObject";
} }
if (type.StartsWith("Vector")) if (type.StartsWith("Vector"))
return "TLVector<" + GetTypeName(type.Replace("Vector<", "").Replace(">", "")) + ">"; return "TLVector<" + GetTypeName(type.Replace("Vector<", "").Replace(">", "")) + ">";
if (type.ToLower().Contains("inputcontact"))
return "TLInputPhoneContact";
if (type.IndexOf('.') != -1 && type.IndexOf('?') == -1)
{
if (interfacesList.Any(x => x.ToLower() == (type).ToLower()))
return FormatName(type.Split('.')[0]) + "." + "TLAbs" + type.Split('.')[1];
else if (classesList.Any(x => x.ToLower() == (type).ToLower()))
return FormatName(type.Split('.')[0]) + "." + "TL" + type.Split('.')[1];
else
return FormatName(type.Split('.')[1]);
}
else if (type.IndexOf('?') == -1)
{
if (interfacesList.Any(x => x.ToLower() == type.ToLower()))
return "TLAbs" + type;
else if (classesList.Any(x => x.ToLower() == type.ToLower()))
return "TL" + type;
else
return type;
}
else else
{ {
if (type.IndexOf('.') != -1 && type.IndexOf('?') == -1) return GetTypeName(type.Split('?')[1]);
{
if (interfacesList.Any(x => x.ToLower() == (type).ToLower()))
return FormatName(type.Split('.')[0]) + "." + "TLAbs" + type.Split('.')[1];
else if (classesList.Any(x => x.ToLower() == (type).ToLower()))
return FormatName(type.Split('.')[0]) + "." + "TL" + type.Split('.')[1];
else
return FormatName(type.Split('.')[1]);
}
else if (type.IndexOf('?') == -1)
{
if (interfacesList.Any(x => x.ToLower() == type.ToLower()))
return "TLAbs" + type;
else if (classesList.Any(x => x.ToLower() == type.ToLower()))
return "TL" + type;
else
return type;
}
else
{
return GetTypeName(type.Split('?')[1]);
}
} }
} }
public static string LookTypeInLists(string src) public static string LookTypeInLists(string src)
{ {
@ -401,7 +400,7 @@ namespace TeleSharp.Generator
{ {
if (p.type.ToLower().Contains("vector")) if (p.type.ToLower().Contains("vector"))
{ {
return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeVector<{GetTypeName(p.type).Replace("TLVector<","").Replace(">","")}>(br);"; return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeVector<{GetTypeName(p.type).Replace("TLVector<", "").Replace(">", "")}>(br);";
} }
else return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeObject(br);"; else return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeObject(br);";
} }

View file

@ -30,7 +30,7 @@ namespace TeleSharp.TL.Contacts
public override void DeserializeBody(BinaryReader br) public override void DeserializeBody(BinaryReader br)
{ {
contacts = ObjectUtils.DeserializeVector<TLInputPhoneContact>(br); contacts = (TLVector<TLInputPhoneContact>)ObjectUtils.DeserializeVector<TLInputPhoneContact>(br);
replace = BoolUtil.Deserialize(br); replace = BoolUtil.Deserialize(br);
} }