QcClient TryConnectUser(INetUser user) { ushort port = user.Port; string name = user.Name; string pcname = user.HostName; try { var ips = user.IP.Split(new[] { ',' }); foreach (var i in ips) { var r = TryConnectIp(i, port, name); if (r != null) { return(r); } } /* * // 这是个费时的操作 * var ipfromhost = System.Net.Dns.GetHostAddresses(pcname); * foreach (var i in ipfromhost) * { * * }*/ } catch (Exception ex) { //string a=ex.ToString; return(null); } return(null); }
public QcMsgUser AddUser(INetUser user) { var qmu = new QcMsgUser(user); lstUser.TryAdd(qmu.Name, qmu); return(qmu); }
private void ReadPoints(INetUser user, INetRoom room, System.Action <NetRoomPlayerRank> onSuccess, System.Action <INetError> onError) { WWWForm form = new WWWForm(); form.AddField("op", "read_points"); form.AddField("room_id", room.RoomId); form.AddField("room_mode", room.RoomMode.ToString()); form.AddField("user_id", user.id); form.AddField("user_name", user.name); form.AddField("avatar_id", user.avatarId); form.AddField("level", user.level); MakeRequest(form, json => { try { Dictionary <string, object> dict = Json.Deserialize(json) as Dictionary <string, object>; if (dict == null) { onError?.Invoke(errorFactory.Create(NetErrorCode.json, string.Empty)); return; } NetRoomPlayerRank rank = new NetRoomPlayerRank(dict, resourceService); onSuccess?.Invoke(rank); } catch (Exception exception) { onError?.Invoke(errorFactory.Create(NetErrorCode.json, string.Empty)); } }, onError); }
private void ProcessReceivedMessage(INetUser client, byte[] messageBuffer) { using (INetPacketStream packet = _packetParser.PacketProcessor.CreatePacket(messageBuffer)) { client.HandleMessage(packet); } }
private void WriteUser(INetUser user, string wishlist, System.Action <INetUser> onSuccess, System.Action <INetError> onError) { WWWForm form = new WWWForm(); form.AddField("op", "write_user"); form.AddField("user_id", user.id); form.AddField("user_name", user.name); form.AddField("avatar_id", user.avatarId); form.AddField("level", user.level); form.AddField("wishlist", wishlist); MakeRequest(form, (json) => { try { Dictionary <string, object> userObj = Json.Deserialize(json) as Dictionary <string, object>; if (userObj == null) { onError?.Invoke(errorFactory.Create(NetErrorCode.json, string.Empty)); return; } NetPlayer player = new NetPlayer(userObj, true, resourceService); onSuccess?.Invoke(player); } catch (Exception exception) { onError?.Invoke(errorFactory.Create(NetErrorCode.json, string.Empty)); } }, onError); }
/// <summary> /// Adds the message to the sending queue. /// </summary> /// <param name="user">User that sent the message</param> /// <param name="message">Message</param> private void SendMessageAction(INetUser user, byte[] message) { if (this._clients.ContainsKey(user.Id)) { this._messageQueue.Add(new MessageData(user, message)); } }
/// <inheritdoc /> public void Start(INetUser clientConnection) { SocketAsyncEventArgs socketAsyncEvent = GetSocketEvent(); socketAsyncEvent.UserToken = new NetToken(clientConnection); ReceiveData(clientConnection, socketAsyncEvent); }
public QcMsgUser(INetUser user) { this.IP = user.IP; this.Port = user.Port; this.HostName = user.HostName; this.name = user.Name; this.User = user; }
public void ReadAllRoomPoints(INetUser user, List <string> roomIds) { ReadAllRoomPoints(user, roomIds, (ranks) => { netService.OnRoomNetRanksReceived(ranks); }, (error) => { netService.OnNetErrorOccured("read_points", error); }); }
public void ReadPoints(INetUser user, INetRoom room) { ReadPoints(user, room, rank => { netService.OnRoomNetRankReaded(user, room, rank); }, (error) => { netService.OnNetErrorOccured("read_points", error); }); }
public void WriteUser(INetUser user, Dictionary <string, string> wishlist) { WriteUser(user, MiniJSON.Json.Serialize(wishlist), (netUser) => { netService.OnNetUserWritten(netUser); }, (error) => { netService.OnNetErrorOccured("write_user", error); }); }
public static void SendWelcome(INetUser client) { using (var packet = new NetPacket()) { packet.Write((uint)ISCPacketType.WELCOME); client.Send(packet); } }
public void RemoveFriend(INetUser targetUser) { RemoveFriend(netService.LocalPlayer, targetUser, (newfriends) => { this.friends.Replace(newfriends); RavenhillEvents.OnFriendsUpdated(friends); }, (error) => { netService.OnNetErrorOccured("remove_friend", error); }); }
public static void SendAuthenticationResult(INetUser client, ISCPacketCode result) { using (var packet = new NetPacket()) { packet.Write((uint)ISCPacketType.AUTHENT_RESULT); packet.Write((uint)result); client.Send(packet); } }
/// <summary> /// Send a welcome packet to the client. /// </summary> /// <param name="client">Client</param> /// <param name="sessionId">Session id</param> public static void SendWelcome(INetUser client, uint sessionId) { using (var packet = new FFPacket()) { packet.WriteHeader(PacketType.WELCOME); packet.Write(sessionId); client.Send(packet); } }
/// <summary> /// Send a pong response to the client. /// </summary> /// <param name="client">Client</param> /// <param name="time">Current time</param> public static void SendPong(INetUser client, int time) { using (var packet = new FFPacket()) { packet.WriteHeader(PacketType.PING); packet.Write(time); client.Send(packet); } }
/// <summary> /// Sends a login error. /// </summary> /// <param name="client"></param> /// <param name="error"></param> public static void SendLoginError(INetUser client, ErrorType error) { using (var packet = new FFPacket()) { packet.WriteHeader(PacketType.ERROR); packet.Write((int)error); client.Send(packet); } }
/// <summary> /// Send an authentication request to the ISCServer. /// </summary> /// <param name="client">client connection</param> /// <param name="id">Server Id</param> /// <param name="host">Server Host</param> /// <param name="name">Server name</param> public static void SendAuthentication(INetUser client, int id, string host, string name) { using (var packet = new NetPacket()) { packet.Write((uint)ISCPacketType.AUTHENT); packet.Write(id); packet.Write(host); packet.Write(name); packet.Write((byte)ISCServerType.Cluster); client.Send(packet); } }
public static void SendUpdateWorldList(INetUser client, IEnumerable <WorldServerInfo> worldServers) { using (var packet = new NetPacket()) { packet.Write((uint)ISCPacketType.UPDATE_CLUSTER_WORLDS_LIST); packet.Write(worldServers.Count()); foreach (var world in worldServers) { packet.Write(world.Id); packet.Write(world.Host); packet.Write(world.Name); packet.Write(world.ParentClusterId); } client.Send(packet); } }
private void ReadAllRoomPoints(INetUser user, List <string> roomIds, Action <Dictionary <string, NetRoomPlayerRank> > onSuccess, Action <INetError> onError) { WWWForm form = new WWWForm(); form.AddField("op", "read_all_rooms_points"); form.AddField("user_id", user.id); form.AddField("user_name", user.name); form.AddField("avatar_id", user.avatarId); form.AddField("level", user.level); form.AddField("rooms", roomIds.JoinToString(",")); MakeRequest(form, (json) => { try { Dictionary <string, NetRoomPlayerRank> ranks = ParseRoomRanks(json); onSuccess?.Invoke(ranks); } catch (Exception exception) { onError?.Invoke(errorFactory.Create(NetErrorCode.json, string.Empty)); } }, onError); }
private void AddFriend(INetUser user, INetUser targetUser, Action <FriendCollection> onSuccess, Action <INetError> onError) { WWWForm form = new WWWForm(); form.AddField("op", "add_friend"); form.AddField("user_id", user.id); form.AddField("target_user_id", targetUser.id); MakeRequest(form, json => { Dictionary <string, object> dict = MiniJSON.Json.Deserialize(json) as Dictionary <string, object>; if (dict == null) { onError?.Invoke(errorFactory.Create(NetErrorCode.json, string.Empty)); } else { FriendCollection friendCollection = new FriendCollection(dict, resourceService); onSuccess?.Invoke(friendCollection); } }, onError); }
/// <inheritdoc /> public void DispatchMessage(INetUser client, NetDataToken token) { var bufferSize = this.PacketProcessor.IncludeHeader ? this.PacketProcessor.HeaderSize + token.MessageSize.Value : token.MessageSize.Value; var buffer = new byte[bufferSize]; if (this.PacketProcessor.IncludeHeader) { Array.Copy(token.HeaderData, 0, buffer, 0, this.PacketProcessor.HeaderSize); Array.Copy(token.MessageData, 0, buffer, this.PacketProcessor.HeaderSize, token.MessageSize.Value); } else { Array.Copy(token.MessageData, 0, buffer, 0, token.MessageSize.Value); } Task.Run(() => { using (INetPacketStream packet = this.PacketProcessor.CreatePacket(buffer)) client.HandleMessage(packet); }); }
/// <summary> /// Sends the available server list. /// </summary> /// <param name="client"></param> /// <param name="username"></param> /// <param name="clusters"></param> public static void SendServerList(INetUser client, string username, IEnumerable <ClusterServerInfo> clusters) { using (var packet = new FFPacket()) { packet.WriteHeader(PacketType.SRVR_LIST); packet.Write(0); packet.Write <byte>(1); packet.Write(username); packet.Write(clusters.Sum(x => x.WorldServers.Count) + clusters.Count()); foreach (ClusterServerInfo cluster in clusters) { packet.Write(-1); packet.Write(cluster.Id); packet.Write(cluster.Name); packet.Write(cluster.Host); packet.Write(0); packet.Write(0); packet.Write(1); packet.Write(0); foreach (WorldServerInfo world in cluster.WorldServers) { packet.Write(cluster.Id); packet.Write(world.Id); packet.Write(world.Name); packet.Write(world.Host); packet.Write(0); packet.Write(0); packet.Write(1); packet.Write(100); // Capacity } } client.Send(packet); } }
/// <inheritdoc /> protected override void OnError(INetUser client, SocketError socketError) { // TODO: dispatch error to the parent server }
/// <inheritdoc /> protected override void OnDisconnected(INetUser client) => this._server.DisconnectClient(client.Id);
/// <summary> /// A socket error has occured. /// </summary> /// <param name="client">Client.</param> /// <param name="socketError">Socket error.</param> protected abstract void OnError(INetUser client, SocketError socketError);
/// <summary> /// Client has been disconnected. /// </summary> /// <param name="client">Disconnected client.</param> protected abstract void OnDisconnected(INetUser client);
public void OnNetUserWritten(INetUser user) { RavenhillEvents.OnNetUserWritten(user); Debug.Log("User written: " + user.ToString()); }
public void OnRoomNetRankReaded(INetUser user, INetRoom room, NetRoomPlayerRank rank) { RavenhillEvents.OnRoomNetRankReaded(user, room, rank); Debug.Log($"Room Rank Readed: {rank.ToString()}"); UpdateRanks(room, rank); }
/// <summary> /// Creates a new <see cref="MessageData"/> instance. /// </summary> /// <param name="user">Message owner</param> /// <param name="message">Message data</param> public MessageData(INetUser user, byte[] message) { this.User = user; this.Message = message; }