119 lines
5.3 KiB
C#
Executable File
119 lines
5.3 KiB
C#
Executable File
using Luski.net.Enums;
|
|
using Luski.net.JsonTypes;
|
|
using Luski.net.JsonTypes.BaseTypes;
|
|
using Luski.net.JsonTypes.HTTP;
|
|
using Luski.net.JsonTypes.WSS;
|
|
using System;
|
|
using System.Text.Json;
|
|
using WebSocketSharp;
|
|
|
|
namespace Luski.net
|
|
{
|
|
public sealed partial class Server
|
|
{
|
|
private void DataFromServer(object? sender, MessageEventArgs e)
|
|
{
|
|
if (e.IsPing) return;
|
|
IncomingWSS? data = JsonSerializer.Deserialize(e.Data, IncomingWSSContext.Default.IncomingWSS);
|
|
switch (data?.Type)
|
|
{
|
|
case DataType.Login:
|
|
WSSLogin n = JsonSerializer.Deserialize(e.Data, WSSLoginContext.Default.WSSLogin)!;
|
|
Token = n.Token;
|
|
break;
|
|
case DataType.Error:
|
|
if (Token is null)
|
|
{
|
|
Error = data.Error;
|
|
}
|
|
else
|
|
{
|
|
if (OnError is not null)
|
|
{
|
|
_ = OnError.Invoke(new Exception(data.Error));
|
|
}
|
|
}
|
|
break;
|
|
case DataType.Message_Create:
|
|
if (MessageReceived is not null)
|
|
{
|
|
SocketMessage? m = JsonSerializer.Deserialize<SocketMessage>(e.Data);
|
|
if (m is not null)
|
|
{
|
|
m.decrypt(Encryption.File.Channels.GetKey(m.ChannelID));
|
|
_ = MessageReceived.Invoke(m);
|
|
}
|
|
}
|
|
break;
|
|
case DataType.Status_Update:
|
|
if (UserStatusUpdate is not null)
|
|
{
|
|
StatusUpdate? SU = JsonSerializer.Deserialize<StatusUpdate>(e.Data);
|
|
if (SU is not null)
|
|
{
|
|
SocketRemoteUser after = SocketUserBase.GetUser(SU.id, SocketRemoteUserContext.Default.SocketRemoteUser).Result;
|
|
after.Status = SU.after;
|
|
SocketRemoteUser before = after.Clone();
|
|
before.Status = SU.before;
|
|
_ = UserStatusUpdate.Invoke(before, after);
|
|
}
|
|
}
|
|
break;
|
|
case DataType.Friend_Request:
|
|
if (ReceivedFriendRequest is not null)
|
|
{
|
|
FriendRequest? request = JsonSerializer.Deserialize(e.Data, FriendRequestContext.Default.FriendRequest);
|
|
if (request is not null) _ = ReceivedFriendRequest.Invoke(SocketUserBase.GetUser(request.Id, SocketRemoteUserContext.Default.SocketRemoteUser).Result);
|
|
}
|
|
break;
|
|
case DataType.Friend_Request_Result:
|
|
if (FriendRequestResult is not null)
|
|
{
|
|
FriendRequestResult? FRR = JsonSerializer.Deserialize<FriendRequestResult>(e.Data);
|
|
if (FRR is not null && FRR.Channel is not null && FRR.Id is not null && FRR.Result is not null)
|
|
{
|
|
SocketDMChannel chan = SocketChannel.GetChannel((long)FRR.Channel, SocketDMChannelContext.Default.SocketDMChannel).Result;
|
|
chans.Add(chan);
|
|
SocketRemoteUser from1 = SocketUserBase.GetUser((long)FRR.Id, SocketRemoteUserContext.Default.SocketRemoteUser).Result;
|
|
from1.Channel = chan;
|
|
_ = FriendRequestResult.Invoke(from1, (bool)FRR.Result);
|
|
}
|
|
}
|
|
break;
|
|
case DataType.Call_Info:
|
|
if (IncommingCall is not null)
|
|
{
|
|
callinfoinc? ci = JsonSerializer.Deserialize<callinfoinc>(e.Data);
|
|
if (ci is not null) _ = IncommingCall.Invoke(SocketChannel.GetChannel(ci.channel, SocketTextChannelContext.Default.SocketTextChannel).Result, SocketUserBase.GetUser(ci.from, SocketRemoteUserContext.Default.SocketRemoteUser).Result);
|
|
}
|
|
break;
|
|
case DataType.Call_Data:
|
|
if (AudioClient is not null)
|
|
{
|
|
AudioClient.Givedata(e.Data);
|
|
}
|
|
break;
|
|
case DataType.Key_Exchange:
|
|
try
|
|
{
|
|
KeyExchange? KE = JsonSerializer.Deserialize<KeyExchange>(e.Data);
|
|
if (KE is not null) Encryption.File.Channels.AddKey(KE.channel, Encryption.Encoder.GetString(Encryption.Decrypt(Convert.FromBase64String(KE.key))));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (OnError is not null) OnError.Invoke(ex);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
private class callinfoinc
|
|
{
|
|
public long channel { get; set; } = default!;
|
|
public long from { get; set; } = default!;
|
|
}
|
|
}
|
|
}
|