From: <svn...@ni...> - 2007-03-15 00:38:59
|
Author: daelstorm Date: 2007-03-15 01:38:53 +0100 (Thu, 15 Mar 2007) New Revision: 359 Modified: trunk/nicotine+/pynicotine/pynicotine.py trunk/nicotine+/pynicotine/slskproto.py Log: Hyriand's MultiThreaded selected should vastly improve network connectivity. Peer Socket/Connection limits should not be an issue on Win32 any more. Modified: trunk/nicotine+/pynicotine/pynicotine.py =================================================================== --- trunk/nicotine+/pynicotine/pynicotine.py 2007-03-15 00:24:38 UTC (rev 358) +++ trunk/nicotine+/pynicotine/pynicotine.py 2007-03-15 00:38:53 UTC (rev 359) @@ -869,7 +869,7 @@ else: country = "" self.search.ShowResult(msg, i.username, country) - #self.ClosePeerConnection(i.conn) + self.ClosePeerConnection(i.conn) def PierceFireWall(self, msg): for i in self.peerconns: Modified: trunk/nicotine+/pynicotine/slskproto.py =================================================================== --- trunk/nicotine+/pynicotine/slskproto.py 2007-03-15 00:24:38 UTC (rev 358) +++ trunk/nicotine+/pynicotine/slskproto.py 2007-03-15 00:38:53 UTC (rev 359) @@ -10,11 +10,12 @@ from slskmessages import * import SocketServer import socket +if sys.platform == "win32": + from multiselect import multiselect import select import threading import struct -import random -import time +import random, sys, time from errno import EINTR from utils import _ @@ -74,95 +75,95 @@ with length and message code followed by the actual messsage data. These are the codes.""" - servercodes = { - Login:1, - SetWaitPort:2, - GetPeerAddress:3, - AddUser:5, - GetUserStatus:7, - SayChatroom:13, - JoinRoom:14, - LeaveRoom:15, - UserJoinedRoom:16, - UserLeftRoom:17, - ConnectToPeer:18, - MessageUser:22, - MessageAcked:23, - FileSearch:26, - SetStatus:28, - ServerPing:32, - SendSpeed:34, - SharedFoldersFiles:35, - GetUserStats:36, - QueuedDownloads:40, - Relogged:41, - UserSearch:42, - AddThingILike:51, - RemoveThingILike:52, - Recommendations:54, - GlobalRecommendations:56, - UserInterests:57, - PlaceInLineResponse:60, - RoomAdded:62, - RoomRemoved:63, - RoomList:64, - ExactFileSearch:65, - AdminMessage:66, - GlobalUserList:67, - TunneledMessage:68, - PrivilegedUsers:69, - Msg83:83, - Msg84:84, - Msg85:85, - ParentInactivityTimeout:86, - SearchInactivityTimeout:87, - MinParentsInCache:88, - Msg89:89, - DistribAliveInterval:90, - AddToPrivileged:91, - CheckPrivileges:92, - CantConnectToPeer:1001, - HaveNoParent:71, - SearchRequest:93, - NetInfo:102, - WishlistSearch:103, - WishlistInterval:104, - SimilarUsers:110, - ItemRecommendations:111, - ItemSimilarUsers:112, - RoomTickerState:113, - RoomTickerAdd:114, - RoomTickerRemove:115, - RoomTickerSet:116, - AddThingIHate:117, - RemoveThingIHate:118, - RoomSearch:120, - SendUploadSpeed:121, - GivePrivileges:123, - NotifyPrivileges:124, - AckNotifyPrivileges:125, + servercodes = { + Login:1, + SetWaitPort:2, + GetPeerAddress:3, + AddUser:5, + GetUserStatus:7, + SayChatroom:13, + JoinRoom:14, + LeaveRoom:15, + UserJoinedRoom:16, + UserLeftRoom:17, + ConnectToPeer:18, + MessageUser:22, + MessageAcked:23, + FileSearch:26, + SetStatus:28, + ServerPing:32, + SendSpeed:34, + SharedFoldersFiles:35, + GetUserStats:36, + QueuedDownloads:40, + Relogged:41, + UserSearch:42, + AddThingILike:51, + RemoveThingILike:52, + Recommendations:54, + GlobalRecommendations:56, + UserInterests:57, + PlaceInLineResponse:60, + RoomAdded:62, + RoomRemoved:63, + RoomList:64, + ExactFileSearch:65, + AdminMessage:66, + GlobalUserList:67, + TunneledMessage:68, + PrivilegedUsers:69, + Msg83:83, + Msg84:84, + Msg85:85, + ParentInactivityTimeout:86, + SearchInactivityTimeout:87, + MinParentsInCache:88, + Msg89:89, + DistribAliveInterval:90, + AddToPrivileged:91, + CheckPrivileges:92, + CantConnectToPeer:1001, + HaveNoParent:71, + SearchRequest:93, + NetInfo:102, + WishlistSearch:103, + WishlistInterval:104, + SimilarUsers:110, + ItemRecommendations:111, + ItemSimilarUsers:112, + RoomTickerState:113, + RoomTickerAdd:114, + RoomTickerRemove:115, + RoomTickerSet:116, + AddThingIHate:117, + RemoveThingIHate:118, + RoomSearch:120, + SendUploadSpeed:121, + GivePrivileges:123, + NotifyPrivileges:124, + AckNotifyPrivileges:125, + } + + peercodes = { + GetSharedFileList:4, + SharedFileList:5, + FileSearchRequest:8, + FileSearchResult:9, + UserInfoRequest:15, + UserInfoReply:16, + FolderContentsRequest:36, + FolderContentsResponse:37, + TransferRequest:40, + TransferResponse:41, + PlaceholdUpload:42, + QueueUpload:43, + PlaceInQueue:44, + UploadFailed:46, + QueueFailed:50, + PlaceInQueueRequest:51, + UploadQueueNotification:52, + Msg12547:12547 } - - peercodes = { - GetSharedFileList:4, - SharedFileList:5, - FileSearchRequest:8, - FileSearchResult:9, - UserInfoRequest:15, - UserInfoReply:16, - FolderContentsRequest:36, - FolderContentsResponse:37, - TransferRequest:40, - TransferResponse:41, - PlaceholdUpload:42, - QueueUpload:43, - PlaceInQueue:44, - UploadFailed:46, - QueueFailed:50, - PlaceInQueueRequest:51, - UploadQueueNotification:52, - Msg12547:12547 - } distribclasses = {0:DistribAlive,3:DistribSearch} @@ -258,7 +259,7 @@ conns = self._conns connsinprogress = self._connsinprogress queue = self._queue - + while not self._want_abort: if not queue.empty(): conns, connsinprogress, s = self.process_queue(queue, conns, connsinprogress,s) @@ -278,16 +279,19 @@ outsock.append(i) try: # Select Networking Input and Output sockets - input,output,exc = select.select(conns.keys()+connsinprogress.keys()+[p],connsinprogress.keys()+outsock,[],0.5) + if sys.platform == "win32": + input,output,exc = multiselect(conns.keys()+connsinprogress.keys()+[p],connsinprogress.keys()+outsock,[],0.5) + else: + input,output,exc = select.select(conns.keys()+connsinprogress.keys()+[p],connsinprogress.keys()+outsock,[],0.5) #print "Sockets open:", len(conns.keys()+connsinprogress.keys()+[p]+outsock), len(conns.keys()), len(connsinprogress.keys()) except select.error, error: - if len(error.args) == 2 and error.args[0] == EINTR: - # Error recieved; but we don't care :) + if len(error.args) == 2 and error.args[0] == EINTR: + # Error recieved; but we don't care :) continue - print error - self._want_abort = 1 + # Error recieved; terminate networking loop + print error + self._want_abort = 1 self._ui_callback([_("Major Socket Error: Networking terminated! %s" % str(error)) ]) - # Write Output for i in conns.keys(): if i in output: @@ -373,7 +377,7 @@ conns[s].lastping = curtime queue.put(ServerPing()) self._ui_callback([]) - + # Close Server Port if s is not None: s.close() |